gpt4 book ai didi

Python ctypes : doesn't load dll as expected

转载 作者:行者123 更新时间:2023-12-01 14:53:33 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Exporting functions from a DLL with dllexport

(4 个回答)


去年关闭。




我正在尝试在 Windows 10 (x64) 中的 python 中加载一个库。

用于生成测试库的cpp文件为:

extern "C" int check() {
return(1);
}

然后我使用以下命令生成 dll(在 x64 Native Tools 命令提示符中):
cl /c mylib.cpp
link /dll /machine:x64 mylib.obj

生成文件 mylib.dll。
然后在 python 中,它初始化显示以下字符串:
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32

我运行以下命令:
import ctypes
lib=ctypes.CDLL("mylib.dll")
lib.check.restype=(ctypes.c_int,)

并且最后一个命令失败,说不能识别 check .
我也试过 lib._check并使用测试 C 文件代替 cpp,结果相同,并且还尝试使用 ctypes.WinDLL而不是 ctypes.CDLL .

怎么了? Python 是 x64以及图书馆 mylib.dll ...

如果我做:
ctypes.windll.msvcrt.getchar()

功能正常……这里我使用的是 MSVCRT 库,当我加载 ctypes 时可以自动访问它。 .

我应该以不同的方式编译我的库吗?

最佳答案

您需要导出您的 API:

extern "C" __declspec(dllexport) int check() {
return 1;
}

还有 lib.check.restype不应该是元组。 .argtypes需要一个元组:
lib.check.argtypes = ()
lib.check.restype = ctypes.c_int

仅供引用, cl /LD mylib.cpp将一步编译并链接一个 DLL。

也仅供引用, CDLLWinDLL在 x64 上无关紧要,但对应于 __cdecl__stdcall分别在 x86 上调用约定。 x64 只有一个调用约定,所以任何一个都可以工作。

关于Python ctypes : doesn't load dll as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60225852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com