我实际上正在学习 C#/WPF,并且我用 C++ 编写了一个库。而且我有一个函数,它有一个LPSTR
类型的输出参数,测试在 C++ 中运行良好,我实际上得到了我想要的正确大小的正确值。但是在导入 dll 并将格式设置为 unicode/ansi 之后在 C# 中,我的值要么是空的,要么是错误的值。
C++ 项目在 myfunction.dll win32 中构建。
C++ 导出
/*
* getting the right value in outString
* c++ test
*
*/
API_DLLEXPORT long GetSomeString (LPSTR outString ,long * outNbChar);
for (long iChar = 0; iChar < *outNbofchar; ++iChar)
{
outsLibClass[iChar] = (char)finder.GetFileName()[iChar];
}
outsLibClass[*outNbofchar] = '\0';
break;
C# 导入
[DllImport("myfunction.dll", CharSet = CharSet.Unicode)]
public static extern Int32 GetSomeString (StringBuilder outString, ref Int32 outNbChar);
StringBuilder out = new StringBuilder(256) ;
Int32 nbchar = new Int32() ;
int result = GetSomeString (out, ref nbchar ) ;
Console.WriteLine(out.ToString());
// I get the right nbchar
但我没有得到正确的输出结果:
㠴0휐ࠦ휠ࠦ鏺瓑휬ࠦ찞瑻쳁촀
当然,我也尝试将其设置CharSet
为Ansi
但结果为空。
因此,如果有人可以帮助我,那将是非常高兴的。