C#中调用C++ 动态链接库 dll 的方…

首先,c++的类在c#中是不兼容的,因此,c#只能够使用c++的导出函数,不能使用导出类(非常执着的去搞也是可以的,只是得不偿失,很困难)

其次,为了防止c++的编译器对c++函数命名方式进行改变,导出函数要用 extern "C" 来修饰,这个当然是众所周知的了

然后,要把一个函数指明是导出函数,要用 _declspec(dllexport) 来修饰

因此,一个完整的c++导出函数应该是这样的:

extern "C" _declspec( dllexport )
     int MyPlus( int a, int b)
{
       return a+b;
}

  

在c#中,首先要引用命名空间 using System.Runtime.InteropServices;

.

然后使用 DllImport属性来声明一个外部函数,这个函数必须是静态的,因此,应该长成这个样子:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write(mp(2, 3));


        }


        [DllImport("dll.dll", EntryPoint = "MyPlus")]
        public static extern int mp(int a, int b);
    }
}

  

先指定动态链接库名字,EntryPoint是c++中的函数名,mp是你在c#使用的函数名.

.

至此,你就可以随心所欲的使用这个函数了,是不是很简单?

.

如果非常想使用c++中的类,那么只能模仿c++编译器的技术,手动实现所谓的this指针,这个无非是语法糖

把对象的指针强制转换成int类型返回给c#,然后把c++里类的函数包装成一个外部函数,把对象指针以int形式传入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值