我有两个我需要在同一个可执行文件中访问的C DLL。我有两个库的头文件和.LIB文件。不幸的是,我需要访问的功能的子集具有完全相同的名称。到目前为止我所能想到的最好的解决方案是使用LoadLibrary加载其中一个DLL,并使用GetProcAddress显式调用它的方法。有没有办法让我隐式加载这两个库,并以某种方式给编译器提示,在一种情况下,我想调用DLL A中的OpenApi,另一种情况下,我想调用DLL B中的OpenApi?从两个不同的C DLL中调用两个具有相同名称的函数
我正在使用Visual Studio 2008和相应的C运行时库(msvcr90.dll)在C++中开发我的可执行文件。
[编辑]
评论者伊利亚下面问什么我不喜欢有关GetProcAddress的解决方案。我不喜欢它有两个原因:
- 它使代码更加复杂。一行调用函数的代码被三行代码替换,一行定义函数签名,一行调用GetProcAddress,另一行实际调用函数。
- 它更容易出现运行时错误。如果我拼错了函数名或弄乱了签名,我在运行时才看到错误。假设我决定整合一个新版本的dll,并且其中一个方法名称已经改变,它会编译得很好,直到实际调用GetProcAddress时才会出现问题,在测试阶段甚至可能会错过。
由于这是C++,因此您可能还会考虑使用名称空间来区分这两个函数,而不是以特殊用途的方式来修改函数名称,这些名称必须进一步解释。 缺点是这对于C语言调用者不起作用。 – orcmid 2008-11-13 04:10:09