我的环境: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中的函数。
有人能给我一些提示吗?谢谢
目前没有回答
相关问题 更多 >
编程相关推荐