gpt4 book ai didi

python - 将 Python str 转换为 C const char *

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:47 25 4
gpt4 key购买 nike

我刚刚为 C .dll 启动了一些 Python Wrapper。并为此使用了 SWIG。我遇到了一个问题,即来自 dll 的 C 函数将 const char * 的 typedef 作为参数。我按如下方式包装了我的 C 库的 .h(当尝试很多东西以使其工作时,typedef 从 header 复制到接口(interface),真的不知道是否有必要):

Added: 
%include "cpointer.i"
%pointer_class(signed char, p_char);

%apply const char * { chararrayiwant }; //not sure if only should be char

Old Code:
%include "typemaps.i"
%include "windows.i"

%module somemodule
%{ #include "someheader.h"
typedef char chararrayiwant[33];
%}

%include "someheader.h"
typedef char chararrayiwant[33];

当我尝试像这样在我的 Python 文件中执行它时:

import mylib as d
...
key = b"somereallylongserialkey" # type: str
p = ctypes.c_char_p(key)
x = d.myfunc(p, 1, None, None)

我遇到了以下错误:

 x = d.myfunc(p, 1, None, None)
TypeError: in method 'myfunc', argument 1 of type 'chararrayiwant const *'

我已经试了 2 天了,还没有找到任何解决方案来让它工作。

提前致谢!

P.S: 不适用于添加的行

最佳答案

我想您应该将指向字符串的指针传递给 myfunc 而不是字符串。尝试:

p2 = ctypes.addressof(p);
x = d.myfunc(p2, 1, None, None);

第一个函数参数的类型为 constchararrayiwant *,即 char [33] *,即 char**

关于python - 将 Python str 转换为 C const char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51305509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com