试图在python中正确加载和使用dll文件

时间:2018-06-14 18:23:52

标签: python c++ windows ctypes

我正在尝试加载并在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);

有谁知道我怎么做这个工作?感谢。

1 个答案:

答案 0 :(得分:0)

您需要一个DLL,因为Windows没有本机signal工具,因此该库正在模拟POSIX signal功能。 POSIX SIGINT是数值2,这是DWORD的完美值。该常数2可方便地以signal.SIGINT.value形式提供。