实现运行时动态链接的清洁方式

2024-09-30 14:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题将使用Python中的示例,但这似乎是一个一般性的问题。在

我一直在使用加载时动态链接,但出于各种原因(建议在下面的链接中使用),我希望动态加载Python库:

HINSTANCE hModPython = LoadLibrary(_T("Python27.dll"));

我可以从DLL加载Py_Initialize和其他函数,但这是一个肮脏的过程:

^{pr2}$

this conversation中说:

Macros can make using these pointers transparent to any C code that calls routines in Python’s C API.

我的问题是,当我要导入各种各样的函数和各种签名时,如何执行本文作者的建议。最好使用Python.h中已有的签名(以某种方式包括该头)。在


Tags: 函数py示例链接过程动态原因建议
1条回答
网友
1楼 · 发布于 2024-09-30 14:37:25

我会像系统链接器那样做:构造一个包含所有函数名的符号表。然后在表中初始化指针。函数名可以是固定字符串常量,也可以从DLL本身读取(即Win32 API to enumerate dll export functions?)。在

但是,该表方法的一个显著缺点是无法将其与现有代码一起使用,现有代码按名称调用函数(pPy_Initialize();),您必须使用表中的指针,可能通过enum(pPy[Initialize]();)编制索引。在

可以使用不同的表(每个签名一个表)来处理不同的签名。签名也可以以某种符号形式与名称一起存储,然后将其包装在某种访问器魔法中,这样可以解析和检查签名,但这可能很快变得过于复杂,就像发明了另一种编程语言一样。在

IMHO,所有这些奇怪的机器相对于宏的唯一显著优势是,你可以用它加载任意的dll。除此之外,我不会走那条路。在

相关问题 更多 >