我的问题将使用Python中的示例,但这似乎是一个一般性的问题。在
我一直在使用加载时动态链接,但出于各种原因(建议在下面的链接中使用),我希望动态加载Python库:
HINSTANCE hModPython = LoadLibrary(_T("Python27.dll"));
我可以从DLL加载Py_Initialize
和其他函数,但这是一个肮脏的过程:
Macros can make using these pointers transparent to any C code that calls routines in Python’s C API.
我的问题是,当我要导入各种各样的函数和各种签名时,如何执行本文作者的建议。最好使用Python.h中已有的签名(以某种方式包括该头)。在
我会像系统链接器那样做:构造一个包含所有函数名的符号表。然后在表中初始化指针。函数名可以是固定字符串常量,也可以从DLL本身读取(即Win32 API to enumerate dll export functions?)。在
但是,该表方法的一个显著缺点是无法将其与现有代码一起使用,现有代码按名称调用函数(
pPy_Initialize();
),您必须使用表中的指针,可能通过enum(pPy[Initialize]();
)编制索引。在可以使用不同的表(每个签名一个表)来处理不同的签名。签名也可以以某种符号形式与名称一起存储,然后将其包装在某种访问器魔法中,这样可以解析和检查签名,但这可能很快变得过于复杂,就像发明了另一种编程语言一样。在
IMHO,所有这些奇怪的机器相对于宏的唯一显著优势是,你可以用它加载任意的dll。除此之外,我不会走那条路。在
相关问题 更多 >
编程相关推荐