这两天公司给了一个新项目,要为USB以太网服务器(BT-3000GB)写一个切换程序,其实它本身是带了一个虚拟软件,但是不能满足公司的需求,所以要重新自己开发一款。于是参照着源码来进行开发,无奈源码是c++开发的,对我来说,有些晦涩难懂,于是乎,想出来一个方式,就是用c#补充为满足的要求,其他的功能还是保留c++的,在c#中调用c++的动态dll,开发中面临着很多问题,接下来会与大家分享。
这里要选择dll
建完如下所示:
1.在一个解决方案中创建两个项目,一个winform项目(这个和平常创建一样),一个c++项目(这个要注意,如下图)
这里要选择dll
建完如下所示:
2.c++项目生成dll需要注意的地方:
项目属性的设置,配置类型为dll,公共语言运行时支持选择/clr(公共语言运行时支持),否则在winform项目中无法使用。
3.c++中要调用的方法,c#如何引用
对于c++生成的dll的使用,我们需要对方法进行修饰,例如我要在c#中调用OnClickDevice方法,下面是c++和c#中各自的配置:
c++中首先声明EXPORT_DLL,然后用来修饰方法,这样才能保证方法在其他程序中能被调用,具体原因参考博客:http://blog.csdn.net/xfz0330/article/details/51348548
#define EXPORT_DLL extern "C" __declspec(dllexport)
EXPORT_DLL DWORD OnClickDevice(int idex)
{
SXUSBDEVICE sxdev[MAX_DEVICE];
DWORD i=0, j, dwReaded, dwReturned, dwIp;
TCHAR szBuf[4096], szIp[64],szPortName[256];
ZeroMemory(gsxdev<