0

这个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_ {'い㠶㐵䘷䘰䉆ㄴ㌰'} 上收到的运行时。我究竟做错了什么?

4

1 回答 1

0

首先,“请求”拼写错误。

其次,ac# 字符串是 unicode(16 位)。VC6 char* 是 ASCII(8 位)。您的 MarshalAs 应该使用MarshalAs(UnmanagedType.LPStr)

第三,您的返回类型不是字符串,而是 int,并且应该编组为MarshalAs(UnmanagedType.I4),

于 2012-11-29T07:16:27.097 回答