C#调用C++动态库

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);