我正在尝试使用 P/Invoke 从非托管 DLL 中获取字符串(以及其他内容),但无论我尝试什么,该字符串都会出现乱码。
我不是本地 Windows 编码器,所以我不确定字符编码位。DLL 设置为使用“多字节字符集”,我无法更改(因为这会破坏其他项目)。我正在尝试添加一个包装函数来从一些现有的类中提取一些数据。有问题的字符串当前作为 CString 存在,我正在尝试将其复制到 LPTSTR,希望将其放入托管的 StringBuilder 中。
这是我所做的,我认为是最接近正确的(显然,我已经删除了不相关的部分):
// unmanaged function
DLLEXPORT void Test(LPTSTR result)
{
// eval->result is a CString
_tcscpy(result, (LPCTSTR)eval->result);
}
// in managed code
[DllImport("Test.dll", CharSet = CharSet.Auto)]
static extern void Test([Out] StringBuilder result);
// using it in managed code
StringBuilder result = new StringBuilder();
Test(result);
// contents in result garbled at this point
// just for comparison, this unmanaged consumer of the same function works
LPTSTR result = new TCHAR[100];
Test(result);
非常感谢任何提示!谢谢!!!