将.lib和.h文件转换为可在Python中使用的DLL
Convert a .lib and .h file to a DLL that can be used in Python
所以我试图将.lib文件中包含的一些函数导入Python以构建一个SDK,该SDK允许我与一些特殊的硬件组件进行通信。我在网上看到,将.lib文件导入Python并不容易:
静态库(.lib)到Python项目
所以我试图使用。lib及其相应的。h文件构建一个dll。我无法访问.lib源代码。我能看到的只有。h文件。我在网上看了看,发现了这个:
将静态链接库转换为动态dll
因为我正在为Python构建DLL,所以我不能使用.def文件。我尝试直接导入。h和。lib文件到一个项目,并创建一个dll文件,但功能没有实现。因此,我尝试制作一个单独的.h文件,称为包装器,包装。h文件中的函数并调用它们,但函数仍然没有实现和工作。老实说,我非常怀疑我所做的是正确的
下面是我的代码:hardware.h - .lib文件附带的头文件(注意只放了一个函数)
extern "C" int WINAPI GetDigitalOutputInfo(unsigned int deviceNumbers[16],
unsigned int numBits[16],
unsigned int numLines[16]);
_hardware.h -原始头文件的包装器
#pragma once
#include <Windows.h>
#ifdef Hardware_EXPORTS
#define Hardware_API __declspec(dllexport)
#else
#define Hardware_API __declspec(dllimport)
#endif
namespace Hardware
{
class Functions
{
public:
static Hardware_API int NewGetDigitalOutputInfo(unsigned int deviceNumbers[16], unsigned int numBits[16], unsigned int numLines[16]);
};
}
Hardware.cpp -实现包装器
#include "stdafx.h"
#include "hardware.h"
#include "_hardware.h"
#pragma comment(lib, "..\lib\PlexDO.lib")
#pragma comment(lib, "legacy_stdio_definitions.lib")
namespace Hardware
{
int Functions::NewGetDigitalOutputInfo(unsigned int deviceNumbers[16], unsigned int numBits[16], unsigned int numLines[16]) {
return GetDigitalOutputInfo(deviceNumbers, numBits, numLines);
}
}
无论如何,我觉得制作包装器是毫无意义的,因为我应该能够直接使用原始的。h文件和。lib文件来调用函数。除非使包装是唯一的方法,我可以使一个dll没有得到库文件的源代码。有没有办法使一个dll不知道库文件的源代码?是否有方法将lib文件直接导入Python?任何帮助都是感激的。
谢谢@qexyn的帮助。因此,我从包装器(_hardware.h)中取出名称空间和类,并使这些函数成为全局函数。然后我在这些全局函数中添加了外部"C",所以我的代码最终看起来像这样:
_hardware.h
#pragma once
#include <Windows.h>
#ifdef Hardware_EXPORTS
#define Hardware_API __declspec(dllexport)
#else
#define Hardware_API __declspec(dllimport)
#endif
extern "C" Hardware_API int NewGetDigitalOutputInfo(unsigned int deviceNumbers[16], unsigned int numBits[16], unsigned int numLines[16]);
之后一切正常。我可以在python SDK中获取硬件信息。确保添加外部"C",否则名称会混乱,如果你在依赖项查找器中查找你的函数,它会显示得很难看。谢谢你的帮助
- Python ctypes:不会按预期加载 dll
- 将 **float array 从 C++ Dll 传递给 python
- 如何在python中加载C # / C++ dll?
- 尝试使用来自python的dll
- Boost.Python 和导入 dll,"The specified module could not be found"
- 在python-ctypes中声明变量并传递给dll函数
- C++ 使用 SWIG 和 Visual Studio 2017 在 python 中导入 DLL
- Calling C++ dll from python
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 提升 Python 找不到 dll 文件
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 从 Python 调用 Windows DLL 函数时出错
- 尝试在 python 中正确加载和使用 dll 文件
- Windows错误:异常:使用从C++到Python的ctypes创建DLL时出现访问冲突或Windows错误193
- 当嵌入python numpy时,延迟负载python dll
- C DLL中的Python对象
- 为什么 Python 需要 DLL 中的 GetMessage 消息泵送,而不是 Qt
- 在编译像Pillow之类的图书馆时,如何更改Python dll的名称
- 在哪里可以获得Visual Studio的Python DLL
- 编译时跳过Boost.Python dll