1、由C#向C++ dll 传入字符串时,参数直接用string,设置编码格式 CharSet.Unicode CharSet.Ansi。
C++ dll接收使用wchar_t* 或 char*。
2、由C++ dll返回字符串,使用 wchar_t 或char*。
.net 4.0 C#可以直接使用string接收,很方便。
.net 4.0+ C# 用 IntPtr 接收,使用string接收调试不行。
dll代码如下:
extern "C" _declspec(dllexport)const wchar_t* Diagnoser(wchar_t* inputText)
{
delete diagnoser;
diagnoser = new FireEye::Diagnoser();
diagnoser->diagnose(inputText);
diagnoser->report();
return diagnoser->reportText.c_str();
}
C#代码如下:
//声明
[DllImport("FireEyeDll.dll", CharSet = CharSet.Unicode , CallingConvention = CallingConvention.Cdecl)]
//public static extern string Diagnoser(string inputText); //.net 4.0
public static extern IntPtr Diagnoser(string inputText);
//调用
//outputBox.Text = Diagnoser(inputBox.Text); //.net 4.0
IntPtr outPtr = Diagnoser(inputBox.Text);
outputBox.Text = Marshal.PtrToStringUni(outPtr);