目录
1、托管库和非托管库介绍
2、非托管库
3、托管库
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的引用即可调用了