C#调用C/C++的DLL实现字符串的传递

时间:2022-09-09 19:57:26


环境: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
 

其中,MYDLLDLL项目工程名,也即最终的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);