python36.lib如何区分release debug_C DLL和Python CTypes在Release/Debug中的返回不同

在Python中使用ctypes调用一个DLL,该DLL提供打印机API函数。当DLL在调试模式下构建时,返回的打印机名称出现异常,每个字符被表示为udddd。问题在于是否ctypes在调试模式下处理dll内存映射的方式不同,或者有其他调试模式的影响。在DLL内部,值在返回前验证是正确的,但在Python中不正确显示。
摘要由CSDN通过智能技术生成

我有一个DLL,它的存在仅仅是为了向Python公开一些打印机API函数。其中一种方法如下:extern "C" DOEXPORT const wchar_t* P_EnumPrintersW() {

DWORD dwneeded(0), dwreturned(0);

BOOL test = ::EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS,

NULL,

4,

NULL,

0,

&dwneeded,

&dwreturned);

std::vector printbuf;

printbuf.resize(dwneeded);

test = ::EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS,

NULL,

4,

&printbuf[0],

printbuf.size(),

&dwneeded,

&dwreturned);

PRINTER_INFO_4* print4 = static_cast((LPVOID) &printbuf[0]);

wstring result;

for (DWORD i = 0; i < dwreturned; ++i) {

result += L",";

result += print4[i].pPrinterName;

}

return result.c_str();

}

这通常如预期的那样工作,我可以在python世界中使用以下代码调用它:

^{pr2}$

我通常希望dllopts看起来像这样:

^{3}$

是的,我希望空白字符串作为第一个条目,这个DLL的全部原因是为了处理具有语言支持的宽字符名称的打印机名称。在调试模式下构建DLL之前,这一切都很好。然后,我得到的不是我期望的结果,而是:[u'\udddd\udddd\udddd...']

只有一个值,每个字符都是\udddd。哇?是不是ctypes在调试模式下不知道如何处理dll的副作用?这是因为dll的内存映射处于调试模式的影响吗?我可以附加到我的python进程(通过它,调用它的dll)并在返回之前验证result的值,它看起来是正确的,但它不能进入我的python程序。我有点不知所措。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值