很多时候在项目中需要通过C++调用C#的dll,或者反过来条用。
首先明白一个前提:C#是托管型代码。C++是非托管型代码。
托管型代码的对象在托管堆上分配内存,创建的对象由虚拟机托管。(C# )
非托管型代码对象有实际的内存地址,创建的对象必须自己来管理和释放。(C++)
两者详细区别阅读我的另一篇:托管代码和非托管代码的介绍,以及在这区别下的混合调试方法
1、C#调用C++的dll.
在C#工程中的引用项中直接将要使用的C++dll引用进来即可。 然后创建对象或者调用接口。
2、C++调用C#的dll.
C++调用C#dll,目前我知道的有两种方式
(1)com方式调用。
这种调用方式就是将dll转换成类com组件的方式调用。
直接看方法:C++ 调用C#dll不是直接调用dll, 而是调用一个转变后的文件:.tlb文件的支持
tlb文件:com类型库文件,它包含接口相关信息。在需要使用对应com类的模块里,通过"#import xxx.tlb"来调用。
eg: 在C++代码中使用: #import "../../out/debug/TGPDFSignLib.tlb"
这个.tlb文件会对应的生成tgpdfsignlib.tli 和 tgpdfsignlib.tlh两个文件。
在VC下#import "