1、若C#调用VC的动态库,而dll中使用了MFC则须将MFC静态链接到dll中。
2、C#调用C++的动态库有三种方法:COM组件、托管代码、非托管代码。
COM组件需客户端注册,若客户无管理员权限则无法使用;
托管代码可以将dll中的类导出,但需要写托管代码,添加工作量且代码看上去有点**;
非托管代码不能导出dll中的类,只能导出函数,但好处是dll比较正统,可以给C/C++/C#使用。
3、C#调用C++动态库时需留意参数传递问题,dll中的接口字符串类型最好用char*。
4、传入参数string对应接口中的char*, out 参数用StringBuilder, 注意使用unsafe。若在其它类中使用导出函数,需使用public关键字。
[DllImport(@"HIDUSBLib.dll", EntryPoint = "Receive")] public extern unsafe static bool Receive(string devName, [MarshalAs(UnmanagedType.LPStr)]StringBuilder buf, int bufLen, int* nRecvLen, int timeout);