环境:VS2013
C/C++端:
新建项目>> Visual C++ >> Win 32 控制台应用程序,后面注意选择 DLL、空项目。
然后新建一个C/C++源程序文件,完成的DLL需要处理的功能,如:
int dlltest(char *str, char *ans)
{
……
}
str作为传入的字符串,ans作为传回的字符串,因内存实际在C#调用端分配,提供内存引用。
新建一个 xxx.def 文件,内容如下:
LIBRARY MYDLL
EXPORTS
dlltest
其中,MYDLL是DLL项目工程名,也即最终的DLL文件名;dlltest是源程序文件中的某个函数,即DLL开放的接口。
在项目的属性配置中,配置属性>>链接器>>输入>>模块定义文件,输入xxx.def。
为了生成的DLL能在其他机器上正常运行,还需要修改:项目属性->配置属性->常规->MFC的使用:在静态库中使用MFC。
完成之后,生成mydll.dll,将文件复制到C#程序的目录下。
C#端:
usingSystem.Runtime.InteropServices;
[DllImport("mydll.dll",CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
static extern int dlltest(byte[] str, byte[] ans);
在C#中需要注意 byte[] 和 string 的转换。
调用:
byte[] str = Encoding.ASCII.GetBytes(s);
byte[] ans = new byte[256];
int n = dlltest(str, ans);
string result = Encoding.ASCII.GetString(ans);