【问题标题】:How to pass a string pointer to a shared library?如何将字符串指针传递给共享库?
【发布时间】:2014-02-20 07:52:39
【问题描述】:

我遇到了以下问题:我想在 python 中为低音库 (http://www.un4seen.com/) 创建绑定并遇到以下问题: 该库允许为位于内存中的文件创建流。但是文档只是说它请求一个 void *file 指针,没有关于包含格式的内容,什么都没有。我尝试了几件事,玩弄了 ctypes,尝试了以下(在 Windows 7 x64 机器上使用 python 2.7):

import ctypes
data=open('my filename.wav').read()
pointer=ctypes.POINTER(data)
cdata=ctypes.c_char_p(data)
cpointer=ctypes.byref(cdata)

但是,无论我传递给我的函数,它都会导致 pythonic 异常或 bass 因为指定了非法参数类型而返回错误。你可以在https://github.com/Timtam/Bass4Py找到我的程序代码 那就是我想将文件传递到的地方。可能我想让它尽可能简单,将带有文件内容的字符串提供给函数,并将该字符串转换为我可以提供给 bass 的格式,以便创建流。但现在我坚持接受贝斯的简单接受和我的指针问题...... 如果有人可以阅读我的代码并解释该怎么做,那将是非常好的,也许有人已经使用过 bass,也许也使用过 python? 当然我在这里搜索并尝试了诸如“使用ctypes传递字符串指针”之类的搜索模式并尝试了我找到的所有内容,但我实际上不知道bass想要我什么...... 提前谢谢你。

【问题讨论】:

    标签: python c string pointers python-2.7


    【解决方案1】:

    我没有查看代码。但是,根据您的描述,我建议您看一下 WinApi 函数CreateFileCreateFileMappingOpenFile(等等)和PyWin32。它在 Linux 中的完成方式是 identical

    【讨论】:

    • 问题是,我不能使用pywin32,因为bass api是跨平台的。很高兴知道它可以在 windows、linux 和 mac 上完成。
    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    相关资源
    最近更新 更多