У меня Win32 DLL в VC6 и вызов на C # с параметром char *?

Этот код 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

Решение

Во-первых, «запрос» написан с ошибкой.

Во-вторых, строка c # — это Unicode (16 бит). VC6 char * — это ASCII (8 бит). Ваш MarshalAs должен использовать MarshalAs(UnmanagedType.LPStr)

В-третьих, ваш тип возвращаемого значения не является строкой, это int, и его нужно маршалировать как MarshalAs(UnmanagedType.I4),

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]