ctype:windows错误:异常:访问冲突读取

2024-06-01 07:13:08 发布

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

我的环境:Windows Vista 64、Python3.1、Visual Studio 2008 sp1

错误描述: 我正试图使用ctype包装dll(如Lib.dll),当继续处理Lib.dll中的函数(如func())时,出现了一个错误:

"WindowsError: exception: access violation reading"

我认为func()函数与以前在我的.py文件中编写的Lib.dll函数的不同之处在于func()包含一个双类型参数,但我确信该参数传递正确,因为我使用了c_double()来进行转换。似乎在输入func()时发生了错误,因为func()中的第一个代码(printf())没有执行。

我也试着在C环境下运行同一个dll及其函数,运行得很顺利。

更多信息:

lib.dll在MSVC中编译(使用外部“C”),我使用CDLL作为调用类型。问题实际上发生在另一个dll(lib2.dll)中的函数上。我只使用LIB DLL,因为LI2.2.DLL是用C++编写的,我把我想要的函数包在LIb2中。看起来是这样的:

///////////////////////////////////
// lib.cpp

lib2 l;

void func(char * c1, char * c2, double d) 
{
    printf("%s, %s, %f\n", c1, c2, d); // All the parameters are passed correctly
    l.func(c1, c2, d);                 // THIS IS where the error occurred
}
///////////////////////////////////
// lib2.cpp

void lib2::func(char * c1, char * c2, double d)
{
    printf();  // The error happened before this line being executed.
    ...
}
///////////////////////////////////
And python script looks like this:
// my.py

dll = cdll.LoadLibrary("lib.dll")

dll.some_func1(c_char_p('a'))
dll.some_func2(c_char_p('b'))

func(c_char_p('c1'), c_char_p('c2'), c_double(1.1))
////////////////////////////////////

当我使用ctype加载lib2.dll时,它不能工作,这也很奇怪。显示未找到函数。所以我必须使用lib.dll来调用lib2.dll中的函数。

有人能给我一些提示吗?谢谢


Tags: 函数py环境lib错误ctypefuncdll