Csharp调用C或C++的DLL实现字符串的传递
C#调用C/C++的DLL实现字符串的传递
环境: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。
完成之后,生成mydll.dll,将文件复制到C#程序的目录下。
C#端:
usingSystem.Runtime.InteropServices;
[DllImport("mydll.dll",CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)] staticextern 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);
相关主题