我有一个用C ++编写的DLL。此DLL的功能类似于以下代码:
C ++代码:
char _H *GetPalette() {
-------Functions body
-------Functions body
return pPaletteString;
}
现在我想从C#代码中的GetPalette()函数中获取Pallet String。
我怎么能从该函数中获取字符串? 我在C#代码中试过这个。但无法得到正确的结果。
C#代码:
[DllImport("cl.dll", EntryPoint = "GetPalette@0", CallingConvention = CallingConvention.StdCall)]
private static extern IntPtr libGetPalette();
public IntPtr GetPalette()
{
return libGetPalette();
}
最后我想得到像这样的字符串
IntPtr result;
result = imgProcess.GetPallet();
string pallet;
pallet = Marshal.PtrToStringAnsi(result);
MessageBox.Show(pallet);
此代码无法正常运行。 有些人可以帮助我,我怎样才能从我的C ++ DLL函数中获取字符串值?
由于
的Shahriar
答案 0 :(得分:1)
你告诉C#调用约定是__stdcall
但是没有证据表明函数本身有__stdcall
标记。此外,char*
可以是UTF-8。
答案 1 :(得分:1)
您可以使用字符串返回类型在C#代码中定义C ++函数。
[DllImport("cl.dll")]
private static extern string GetPalette();
而不是简单地在C#代码中调用它。
string palette = GetPalette();
在DllImport
属性中,您可能需要设置正确的调用约定CallingConvention
和字符编码CharSet