[英]AutoIt and C++. Unicode
我用C ++编写了一个DLL:
extern "C" __declspec(dllexport) void Msg(std::wstring filename)
{
MessageBox(NULL, filename.c_str(), L"", MB_OK);
}
当我尝试从AutoIt调用DLL时:
DllCall("mydll.dll", "none:cdecl", "Msg", "wstr", @AutoItExe)
我收到一条带有少量象形文字的消息。 问题是什么?
编写导出的DLL函数时,不应在其接口中使用任何C ++库类型,因为它们依赖于编译器,版本甚至解决方案(DEBUG或NDEBUG)。
如果这样做,则必须确保调用者使用这些类型的相同实现。 这里不是这种情况。
您应该限制DLL导出的函数,使其仅在其接口中使用与C类型兼容的类型,或其他相互同意的类型。
在DLL实现中,您可以做任何您想做的事情!
在这种情况下,您需要用LPCWSTR
(aka const wchar_t*
)替换std::wstring
参数。 AutoIt的DllCall
文档中DllCall
说明:
WSTR
一个UNICODE宽字符串(至少分配了65536个字符)。...
WINDOWS API类型:LPCWSTR / LPWSTR
AutoIt类型:WSTR
从MSDN的Windows数据类型文档中:
LPWSTR
指向以空字符结尾的16位Unicode字符的指针。 有关更多信息,请参见字体使用的字符集。在WinNT.h中声明此类型,如下所示:
typedef WCHAR *LPWSTR;
...
LPCWSTR
指向以16位Unicode字符为常数的,以空字符终止的常量的指针。 有关更多信息,请参见字体使用的字符集。在WinNT.h中声明此类型,如下所示:
typedef CONST WCHAR *LPCWSTR;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.