C#调用delhpi编写的DLL返回pchar乱码处理
Delphi的函数声明如下:
function proc_mes(const proc_name, general_info, detail_info: pchar; var msg: pchar): Integer; stdcall;
注意:
PChar是一个指针, 它的大小只有32位. 定义时由Delphi自动填0. 要将PChar作为字符串
使用的话必须自己分配内存用完必须自己释放. PChar型字符串由#0表示字符串结尾
Delphi所提供的相关PChar字符串的操作都是判断#0来决定字符串的结尾的。
C#调用Delphi的DLL的声明如下:
[DllImport("msp_mes01.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
static extern int proc_mes(string proc_name, string general_info, string detail_info, ref IntPtr msg);
调用方法:
IntPtr outIntPtr = Marshal.AllocHGlobal(255);
int s = proc_mes("test", "test", "test", ref outIntPtr);
string rr = Marshal.PtrToStringAuto(outIntPtr);
测试结果:返回正确