我有一个简单的 c++ dll,它调用 MessageBox 来显示文本
#include <Windows.h>
#define LIBDLL extern "C" __declspec(dllexport)
LIBDLL void Display(LPCTSTR lpInput) {
MessageBox(0, lpInput, 0, 0);
}
bool __stdcall DllMain(void* hModule, unsigned long dwReason, void* lpReserved) {
switch (dwReason)
{
case 1:
break;
case 0:
break;
case 2:
break;
case 3:
break;
}
return true;
}
Python代码只将一个字符串传递给dll中的Display,它看起来像这样
import ctypes
sampledll = ctypes.WinDLL('SampleDll.dll')
sampledll.Display('Some Text')
即使我使用 std::cout,它也只显示第一个字母
如何让它显示我传递给它的所有文本?
终于解决这个问题了。结果我必须先对文本进行编码,然后再将其传递给 dll。
所以不要这样做
sampledll.Display('Some Text')
应该这样做
sampledll.Display('Some Text'.encode('utf-8))