Dll导致Python在使用mems时崩溃

2024-10-02 18:14:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在研究一个项目,我想用Python中的C++编写一个旧的代码库。我想要的是使用CodeBase重新索引一个.dbf文件,该文件有一个.cdx索引。但目前,Python正在运行时崩溃。接下来会有更详细的解释。你知道吗

至于Python,我使用ctypes加载dll,然后执行我自己添加的函数,这应该不会引起任何问题,因为它不使用CodeBase本身没有使用的一行代码。
Python代码:

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

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

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中。Python崩溃了,窗口说python.exe当dll到达以下代码行时:

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

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

dll在运行时试图改变内存是否有问题?如果我用python脚本创建一个.exe文件,会不会是一个python问题消失了?你知道吗

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

最后但同样重要的是,这是我的第一个问题。如果我不小心违反了这里的书面或不成文的规定,我道歉并保证尽快解决。你知道吗


Tags: 文件代码datacodectypesinterfacefiledll
2条回答

首先,指针code没有指向任何地方,因为它是未初始化的。第二,实际上并不尝试填充结构,因为您将memset指针传递给了指针。你知道吗

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

就像Joachim Pileborg说的问题是,传递一个Nullpointer到code4initLow。(“可选”)解决方案是为结构CODE4 S4PTR *code = (CODE4*)malloc(sizeof(CODE4));分配内存,然后像code4initLow(code, 0, S4VERSION, sizeof(CODE4));一样传递指针。你知道吗

相关问题 更多 >