netcore调用c++的dll的两种方法
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
1、托管库和非托管库介绍
托管型代码的对象在托管堆上分配内存创建的对象由虚拟机托管。C#
非托管型代码对象有实际的内存地址创建的对象必须自己来管理和释放。C++
2、非托管库
C++创建的非托管dll库需要用静态方法调用
非托管模式从功能上来说只支持函数调用直接调用C++类库中的公共方法在被导出的函数前面一定要添加额extern “C来指明导出函数的时候使用C语言方式编译和链接的这样保证函数定义的名字相同否则如果默认按C++方式导出那个函数名字就会变得乱七八糟我们的程序就无法找到入口点了。"__declspec(dllexport)“意思是将后面修饰的内容定义为DLL中要导出的内容。
C++中定义如下
extern "C"
{
extern __declspec(dllexport) void mbm_test();
}
或者直接定义extern "C" __declspec(dllexport) void mbm_test(){}
在C#中调用如下
[DllImport("mbmasterd.dll", EntryPoint = "mbm_test")]
static extern void mbm_test();
3、托管库
使用CLR生成的托管C++dll库
需要在C++项目里面设置让动态库受到公共语言运行时的支持然后c#工程添加dll的引用即可调用了