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);

       }

posted @ 2015-06-26 09:34  LiaoXiansheng  阅读(385)  评论(0编辑  收藏  举报