C#项目中解析C++编写的.dll文件

例如:现"D:\TestInterface\"下有一个C++编写的TestInterface.dll文件,使用Depends工具查看到它含两个接口函数Sum(int addend1,int addend2)和Subtraction(int minuend,int subtrahend),需要在C#项目中进行解析调用。

用例:

        [DllImport("kernel32.dll", EntryPoint = "LoadLibrary")]
        public static extern int LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpLibFileName);
        [DllImport("kernel32.dll", EntryPoint = "GetProcAddress")]
        public static extern IntPtr GetProcAddress(int hModule, [MarshalAs(UnmanagedType.LPStr)] string lpProcName);

        //先声明两个与接口函数相关的委托
        delegate bool delegateSum(int addend1,int addend2);
        delegate bool delegateSubtraction(int minuend,int subtrahend);

 

        //定义C#项目中的Sum方法

        private int Sum(int addend1,int addend2)

       {

            //1.从指定路径加载.dll文件

           int hModule = LoadLibrary(@"D:\TestInterface\TestInterface.dll");
            if (hModule == 0)
            {
                return false;
            }

            //2. 读取函数指针
            IntPtr intFnPtr1 = GetProcAddress(hModule, "Sum");

           //3. 将函数指针封装成委托
            delegateSum _delegateSum= (delegateSum)Marshal.GetDelegateForFunctionPointer(intFnPtr1, typeof(delegateSum));

           //4、返回实际操作

           return _delegateSum(int addend1,int addend2);

       }

 

        //定义C#项目中的Subtraction方法

        private int Subtraction(int minuend,int subtrahend)

       {

            //1.从指定路径加载.dll文件

           int hModule = LoadLibrary(@"D:\TestInterface\TestInterface.dll");
           if (hModule == 0)
           {
              return false;
           }

            //2. 读取函数指针
            IntPtr intFnPtr1 = GetProcAddress(hModule, "Subtraction");

           //3. 将函数指针封装成委托
           delegateSubtraction _delegateSubtraction= (delegateSubtraction)Marshal.GetDelegateForFunctionPointer(intFnPtr1, typeof(delegateSubtraction));

           //4、返回实际操作

           return _delegateSubtraction(int minuend,int subtrahend);

       }

转载于:https://www.cnblogs.com/AliaoZoon/p/4601529.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值