【发布时间】:2010-09-22 02:13:56
【问题描述】:
我需要在同一个可执行文件中访问两个 C DLL。我有两个库的头文件和 .LIB 文件。不幸的是,我需要访问的部分功能具有完全相同的名称。到目前为止,我能想到的最佳解决方案是使用 LoadLibrary 加载其中一个 DLL,并使用 GetProcAddress 显式调用其方法。有没有办法让我隐式加载这两个库并以某种方式给编译器一个提示,在一种情况下我想在 DLL A 中调用 OpenApi,在另一种情况下我想在 DLL B 中调用 OpenApi?
我正在使用 Visual Studio 2008 和相应的 C 运行时库 (msvcr90.dll) 在 C++ 中开发我的可执行文件。
[编辑]
评论者 Ilya 在下面询问我不喜欢 GetProcAddress 解决方案的哪些方面。我不喜欢它有两个原因:
- 它使代码更加复杂。将调用函数的一行代码替换为三行代码,一行定义函数签名,一行调用GetProcAddress,另一行实际调用函数。
- 它更容易出现运行时错误。如果我拼错了函数名称或弄乱了签名,我直到运行时才看到错误。假设我决定集成新版本的 dll 并且其中一个方法名称已更改,它将编译得很好,并且在实际调用 GetProcAddress 之前不会出现问题,这甚至可能在测试通过时被遗漏。
【问题讨论】:
标签: c windows visual-studio-2008 dll