python - dll在使用memset时导致Python崩溃

标签 python c++ python-2.7 dll ctypes

我一直在做一个项目,我试图在 Python 中使用用 C++ 编写的旧 CodeBase 库。我想要的是使用 CodeBase 重新索引具有 .cdx 索引的 .dbf 文件。但目前,Python 在运行时崩溃。更详细的解释将在后面进行。

至于 Python,我正在使用 ctypes 加载 dll,然后执行我自己添加的函数,这应该不会造成任何问题,因为它不使用 CodeBase 本身不使用的一行代码。< br/> Python 代码:

import ctypes  
cb_interface = ctypes.CDLL("C4DLL.DLL")  
cb_interface.reindex_file("C:\\temp\\list.dbf")  

这是我添加的 CodeBase 函数,但它需要一些我现在无法提供的知识,而不是把这个问题搞得一团糟。如果有必要,我将尽我所能提供进一步的见解:

S4EXPORT int reindex_file(const char* file){
    CODE4 S4PTR *code;
    DATA4 S4PTR *data;

    code4initLow(&code, 0, S4VERSION, sizeof(CODE4));
    data = d4open(code, file);
    d4reindex(data);

    return 1;
}

根据我自己的调试,我的问题发生在code4initLow。当 dll 到达以下代码行时,Python 崩溃并显示一个窗口,提示“python.exe 已停止工作”:

memset( (void *)c4, 0, sizeof( CODE4 ) ) ;

这里的 c4 是与前面代码块中的代码相同的对象。

在运行时尝试更改内存的 dll 是否存在问题?如果我从我的 python 脚本创建一个 .exe 文件,它会不会是一个 python 问题?

如果有人能回答我这些问题和/或为我的 python 崩溃问题提供解决方案,我将不胜感激。

最后但同样重要的是,这是我在这里的第一个问题。如果我不小心违反了这里的成文或不成文规则,我深表歉意并 promise 尽快解决。

最佳答案

首先,指针 code 没有指向任何地方,因为它是未初始化的。其次,您实际上并没有尝试填充结构,因为您向 memset 传递了一个指向该指针的指针。

您可能应该做的是将 code 声明为普通结构实例(而不是指针),然后在将其传递给 d4open< 时使用 &code/.

关于python - dll在使用memset时导致Python崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35944062/

相关文章:

python - 为什么 .ix 包含在索引范围的末尾?

c++ - 可选参数值

python - 如何在 Pystache 中使用 '.' 渲染键?

python-2.7 - 如何在opencv python中获取背景图像

python - 使用正则表达式从 url 中提取子路径

python - __init__ 的目的

python - 在python中将字符串转换为字典

c++ - 有人可以向我解释这是未定义的行为吗?

c++ - Zeromq:在 Windows 上连接 31. 服务器后,PULL/PUSH 客户端崩溃

ubuntu - 使用 python 获取已安装的 java 版本的详细信息