我正在尝试加载并在python中使用dll。我一直在尝试使用windows-kill,但我对C ++一点都不了解。我能够在visual studio中编译它并且exe文件工作正常但我想弄清楚如何用Python加载dll以便我可以学习如何加载我最终可能想要使用的其他dll。 /> 到目前为止,这是我提出的代码。我不确定它是否需要SIGINT或值的数字,因为命令行使用-SIGINT但我一直在尝试。
lib = ctypes.CDLL('windows-kill-library.dll')
libOpen = getattr(lib, "?sendSignal@WindowsKillLibrary@@YAXKK@Z")
libOpen.argtypes = [wintypes.DWORD, wintypes.DWORD]
val = 'SIGINT'
# val = 0
l = libOpen(9844, val)
print(l)
使用SIGINT作为val我得到错误:
ctypes.ArgumentError: argument 2: <class 'TypeError'>: wrong type
并使用数字作为值得到:
OSError: [WinError -529697949] Windows Error 0xe06d7363
我知道argtypes一定是错的或者其他什么,但我一直在尝试很多不同的东西,并得到同样的错误。
这是未修饰的名称:
void WindowsKillLibrary::sendSignal(unsigned long,unsigned long)
我尝试过使用ctypes.c_ulong和其他一些用于argtypes,但仍然会遇到相同的错误。
在Visual Studio中,当我将鼠标悬停在下面两行的DWORD上时:
DWORD signal_type;
DWORD signal_pid;
如果有帮助,它会说“typedef unsigned long DWORD”。
以下是可以找到here
的用法示例/// <summary>
/// Sends the signal.
/// </summary>
/// <param name="signal_pid">The signal target process id.</param>
/// <param name="signal_type">The signal type.</param>
void sendSignal(DWORD signal_pid, DWORD signal_type);
有谁知道我怎么做这个工作?感谢。
答案 0 :(得分:0)
您需要一个DLL,因为Windows没有本机signal
工具,因此该库正在模拟POSIX signal
功能。 POSIX SIGINT
是数值2,这是DWORD
的完美值。该常数2可方便地以signal.SIGINT.value
形式提供。