c# 中引用非托管动态库 工作中我们经常会引用别人封住好的工具,一般我们都是通过引用添加的但是c#只能引用托管的,那些非托管的就不能直接添加引用 但是微软为我们提供了一种调用非托管的方法

下面这段代码就是如何引用

    [DllImport("KeeperClient.dll", EntryPoint = "MisPosInterface", CharSet = CharSet.Ansi)]
    public static extern int MisPosInterface(ref Object.ST_Input inputData, ref Object.ST_Output outputData);
    

DllImport 动态库名称 EntryPoint=要调用的方法 CharSet=向方法发送的数据类型

DllImport 要和extern 关键字搭配使用而且方法要定义为静态的

数据类型定义

   [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
struct ST_Input
{
    /// <summary>
    /// 交易类型
    /// </summary>
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
    public char[] transType;              //交易类型       

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
    public char[] transAmount;            //交易金额

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
    public char[] loyalty;            //积分 

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
    public char[] MisTrace;           //MIS流水号

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
    public char[] InstallmentTimes;      //分期期数 

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
    }
    

具体的数据类型对应请参考: https://blog.csdn.net/jasonleesjtu/article/details/7837813