【背景】
C#调用C++生成的DLL,C#调用函数,接收C++返回的字符串
【C++】
1 2 3 4 5 6 7 8
| static char buff[20];
char* testString() { string tmp = "hello world"; strcpy_s(buff, tmp.c_str()); return buff; }
|
【C#】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| [DllImport("xxxx.dll", EntryPoint = "testString", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr testString();
IntPtr intPtr = testString(); string str = Marshal.PtrToStringAnsi(intPtr);
MessageBox.Show( str );
IntPtr intPtr = testString(); string str = ""; str = Marshal.PtrToStringAnsi(intPtr); if (string.IsNullOrEmpty(str)) { MessageBox.Show("fail"); }else { MessageBox.Show(str); }
|
以上就是我的方法,实测可以接收到字符串数据。