Этот код 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_ {‘い 㠶 㐵 䘷 䘰 䉆 ㄴ ㌰’}. Что я делаю неправильно?
Во-первых, «запрос» написан с ошибкой.
Во-вторых, строка c # — это Unicode (16 бит). VC6 char * — это ASCII (8 бит). Ваш MarshalAs должен использовать MarshalAs(UnmanagedType.LPStr)
В-третьих, ваш тип возвращаемого значения не является строкой, это int, и его нужно маршалировать как MarshalAs(UnmanagedType.I4)
,
Других решений пока нет …