C#与C++ dll 之间传递字符串string wchar_t* char* IntPtr

2023-05-16

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);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#与C++ dll 之间传递字符串string wchar_t* char* IntPtr 的相关文章

随机推荐