Ctypes create_string_buffer提出引发TypeError(init)

时间:2014-04-24 16:08:34

标签: python ctypes

我正在尝试使用ctypes将Python字符串传递给c函数(DLL)。该函数需要一个const char *。我正在使用create_string_buffer,但它返回一个错误: 引发TypeError(init) TypeError:

我的python代码非常简单:

testUpdate = myDll['testUpdate']
def testUpdate(Path):
    p_path = ctypes.create_string_buffer(Path)
    print ctypes.sizeof(p_path), repr(p_path.raw)
    print repr(p_path.value)

    testUpdate(p_path)
    testUpdate.restype = ctypes.c_char

我的C代码更简单:

char testUpdate(const char* softwareToolsPath){
     char p;
     p = *softwareToolsPath;
     return p;

}

我看到这篇文章: create_string_buffer throwing error TypeError: str/bytes expected instead of str instance 但它没有帮助。有人可以帮忙吗?

我正在使用python 2.7。

为了避免任何混淆,我所要做的就是给DLL一个Path(使用Python)。该DLL将打开路径指向的文件并发挥其魔力。所以我只是想为现有的C函数编写一个小包装器。

1 个答案:

答案 0 :(得分:1)

我很困惑。 testUpdate(p_path)是否应该调用C函数?它看起来像递归调用python代码(使用错误的参数类型)。尝试重命名Python函数。

顺便说一下,您的C代码有问题。我想你想要的是

char * testUpdate(const char * softwareToolsPath) {
    char * p;
    p = softwareToolsPath;
    return p;
}