将完整的LPCSTR传递给c++;来自python文本的dll 我有一个简单的C++ DLL,调用消息框来显示文本< /P> #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; }

将完整的LPCSTR传递给c++;来自python文本的dll 我有一个简单的C++ DLL,调用消息框来显示文本< /P> #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,c++,dll,Python,C++,Dll,它只显示第一个字母,即使我使用的是std::cout 如何使它显示我传递给它的所有文本?最终解决了这个问题。事实证明,在将文本传递到dll之前,我必须对其进行编码 因此,与其这样做 sampledll.Display('Some Text') 应该这样做 sampledll.Display('Some Text'.encode('utf-8)) 请看地图。您将看到所需的参数是LPCTSTR,而不是LPCSTR。如果您不知道它们之间的区别,那么现在是时候了解ANSI和宽字符串之间的区别了。因

它只显示第一个字母,即使我使用的是std::cout


如何使它显示我传递给它的所有文本?

最终解决了这个问题。事实证明,在将文本传递到dll之前,我必须对其进行编码

因此,与其这样做

sampledll.Display('Some Text')
应该这样做

sampledll.Display('Some Text'.encode('utf-8))

请看地图。您将看到所需的参数是
LPCTSTR
,而不是
LPCSTR
。如果您不知道它们之间的区别,那么现在是时候了解ANSI和宽字符串之间的区别了。因此,更可能的情况是,您需要传递使用宽字符的字符串。对其进行了更改,但仍然输出相同的结果。请确保将正确的字符串类型发送到
MessageBox
函数。我不知道Pyhon,也不知道发送给DLL函数的字符串是否是宽字符串。一句话——您需要Python代码和DLL来商定来回发送的字符串类型。到目前为止,情况似乎并非如此。同样,std::cout做同样事情的原因也是同样的。如果要查看整个字符串(如果字符串是宽字符串),请使用
std::wcout
sampledll.Display('Some Text'.encode('utf-8))