gpt4 book ai didi

c++ - 加载 DLL 时 Python 解释器退出

转载 作者:行者123 更新时间:2023-11-28 03:44:25 24 4
gpt4 key购买 nike

我想测试用ctypes 包装一个dll。我编写了以下测试代码并使用 Code::Blocks 和 Cygwin 将其编译为 dll。

#define DLL_EXPORT extern "C" __declspec(dllexport)

DLL_EXPORT int sum(int a, int b) {
return a + b;
}

注意:这是完整的代码。也许缺少了什么?

现在,我将 TestDll.dll 复制到我的桌面并启动 Python 解释器。但是当我想加载它时,解释器就退出了!

C:\Users\niklas\Desktop>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win 32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> dll = ctypes.WinDLL('TestDll')

C:\Users\niklas\Desktop>

但是,加载任何其他库都有效,或者如果找不到该库则报错。
你能告诉我我做错了什么吗?

使用 Cygwin g++ 3.4.4

最佳答案

检查objdump -p TestDll.dll | grep dll 看看你是否链接了 "cygwin1.dll"和 nm TestDll.dll | grep Dll 查看是否有 DllMain。以下命令应正确构建 DLL:

g++ testdll.c -mno-cygwin -shared -o TestDll.dll

此外,您需要使用 CDLL 作为 cdecl 调用约定,而不是 WinDLL:

>>> import ctypes
>>> dll = ctypes.CDLL('TestDll')
>>> dll.sum(4, 5)
9

编辑:我使用来自 Cygwin 存储库的 i686-w64-mingw32-g++.exe (4.5.3) 进行编译,但我以前使用默认的 Cygwin gcc 没有问题,因为 - mno-cygwin 选项。

关于c++ - 加载 DLL 时 Python 解释器退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8037306/

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