python调用c++动态库返回字符串截断_用cType从C++函数返回字符串,给出大的int,而不是字符...

你现在可以做的是一个API泄漏。更好的解决方案是让Python为结果分配和管理内存。在

我还修复了注释中提到的dllimport,并在.cpp文件中定义了TESTLIBRARY_EXPORTS,这样函数就可以从DLL中导出了。restype也被修复了。在

TesterLibrary.h#pragma once

#ifdef TESTLIBRARY_EXPORTS

#define TESTLIBRARY_API __declspec(dllexport)

#else

#define TESTLIBRARY_API __declspec(dllimport)

#endif

#define WIN32_LEAN_AND_MEAN

#include

#ifdef __cplusplus

extern "C" {

#endif

TESTLIBRARY_API char* SaySomething(const char* phrase, char* result, size_t resultMaxLength);

#ifdef __cplusplus

}

#endif

测试工具库.cpp

^{pr2}$

tester2.pyimport ctypes

libName = (r"TestLibrary.dll")

x = ctypes.CDLL(libName)

x.SaySomething.argtypes = [ctypes.c_char_p,ctypes.c_char_p,ctypes.c_size_t]

x.SaySomething.restype = ctypes.c_char_p

phrase = b"Hi"

result = ctypes.create_string_buffer(100)

res = x.SaySomething(phrase,result,ctypes.sizeof(result))

print(res)

print(result.value)

输出b'Decorated '

b'Decorated '

当不再有对result缓冲区的引用时,Python将自动释放它。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值