我在vc6中有win32 dll并使用参数char *调用c#?

时间:2012-11-29 06:51:35

标签: c# c++ dll vc6

这个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_ {'い㠶㐵䘷䘰䉆ㄴ㌰'}。我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

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

第三,你的返回类型不是字符串,它是一个int,应该被编组为MarshalAs(UnmanagedType.I4)