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

まず、「request」のつづりが間違っています。

次に、ac# 文字列は Unicode (16 ビット) です。VC6 char* は ASCII (8 ビット) です。あなたの元帥は使用する必要がありますMarshalAs(UnmanagedType.LPStr)

第三に、戻り値の型は文字列ではなく、int であり、としてマーシャリングする必要がありますMarshalAs(UnmanagedType.I4)

于 2012-11-29T07:16:27.097 に答える