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

Trying to load and use a dll file in python properly

本文关键字:dll 文件 加载 python      更新时间:2023-10-16

我正在尝试在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 作为值,我得到错误:

ctypes.ArgumentError: argument 2: <class 'TypeError'>: wrong type

并使用一个数字作为我得到的值:

OSError: [WinError -529697949] Windows Error 0xe06d7363

我知道参数类型一定是错误的或其他什么,但我一直在尝试很多不同的事情并得到相同的错误。

这是未修饰的名称:

void WindowsKillLibrary::sendSignal(unsigned long,unsigned long)

我尝试将ctypes.c_ulong和其他一些用于参数类型,但仍然遇到相同的错误。

在视觉工作室中,当我将鼠标悬停在以下 2 行中的 DWORD 上时:

DWORD signal_type;
DWORD signal_pid;

如果有帮助,它说"typedef unsigned long DWORD"。

这里也是可以在这里找到的使用示例

/// <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);

有谁知道我如何做到这一点?谢谢。

你需要一个DLL,因为Windows没有本机signal工具,所以该库正在模拟POSIXsignal功能。POSIXSIGINT是数值 2,对于DWORD来说,这是一个完美的值。该常量 2 可以方便地用作signal.SIGINT.value