这个vc6代码:
MCASMARTMANAGER_API int __stdcall reqeustKey_test(char* prKey)
{
Xhandeler.GetPrimaryKey(prKey);
return 0;
}
prKey = "AB472EDB9012"
这个C#代码:
[DllImport(McaSmartManagerDllPath, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)]
[return:MarshalAs(UnmanagedType.LPStr)]
public static extern string reqeustKey_test([MarshalAs(UnmanagedType.LPWStr), In, Out] string prKey);
var key_ = new string(' ', 17);
_strPrimaryKey = McaSmartNativeCommand.reqeustKey_test(key_);
运行时我收到了key_ {'い㠶㐵䘷䘰䉆ㄴ㌰'}。我做错了什么?
答案 0 :(得分:0)
首先,“请求”拼写错误。
其次,c#字符串是unicode(16位)。 VC6 char *是ASCII(8位)。你的MarshalAs应该使用MarshalAs(UnmanagedType.LPStr)
第三,你的返回类型不是字符串,它是一个int,应该被编组为MarshalAs(UnmanagedType.I4)
,