1 回答
TA贡献1811条经验 获得超6个赞
是的,python.exe是该进程,所有DLL均已加载到其内存空间中。
你可能对您.argtypes和restype声明不正确(或根本不)。这是一个有效的示例:
c
__declspec(dllexport) const char* func1()
{
return "hello";
}
yc
#include <stdio.h>
__declspec(dllexport) void func2(const char* s)
{
printf("%s\n",s);
}
Python
>>> from ctypes import *
>>> x = CDLL('x')
>>> x.func1.argtypes = None
>>> x.func1.restype = c_void_p
>>> y = CDLL('y')
>>> y.func2.argtypes = [c_void_p]
>>> y.func2.restype = None
>>> s = x.func1()
>>> hex(s)
'0x7ff8b4ca8000'
>>> y.func2(s)
hello
请注意,我明确声明了该参数,c_void_p因为ctypes它将c_char_p在输出时将a转换为Python字符串,并char*在输入时将其从Python字符串转换为输入,因此无法证明同一指针可以从一个DLL传递到另一个DLL。
SysInternals Process Explorer之类的工具可用于查看进程空间中的DLL:
请注意,由返回的地址x.func1()
在的映射范围内,x.dll
并y.func2(s)
可以正确显示。
添加回答
举报