日期:2014-05-17  浏览次数:20932 次

DllImport,LPCWSTR类型怎么定义
C++写的函数有一个参数是LPCWSTR类型,C#里调用总是不成功:“对函数的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配”
C#定义:
[DllImport("testdll.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
public static extern int testfun([In, MarshalAs(UnmanagedType.LPWStr)]string str);

专门写了一句代码来试验,这个C++函数是:
EXTERN_C _declspec(dllexport) int testfun(LPCWSTR str)
{
return 12;
}

------解决方案--------------------
CallingConvention = CallingConvention.StdCall
应该是这里的问题,没有说明默认应该是Cdecl