由两个dll导出的相同函数,其中一个被称为?

时间:2014-08-08 23:03:16

标签: c++ visual-studio dll

函数void foo()由两个dll D1和D2导出。 主程序链接到D1和D2并调用foo。

void foo();
int main()
{
    foo();
}

这在Visual Studio中成功编译和链接。当我运行程序时,我注意到D1的foo版本被调用。

视觉工作室不应该发出链接器错误,因为它找到了foo的两个匹配项吗?在主程序的配置属性中 - >链接器 - > CommandLine,我注意到它在D2.lib之前有D1.lib。这就是为什么D1的foo版本与Main相关联的原因(在命令行中首先出现的是确定性链接)?

1 个答案:

答案 0 :(得分:1)

要调用.dll.lib中的函数,您需要包含带有函数定义的头文件。

在您的情况下,您最终只包含两个标头中的一个,或直接在cpp中编写函数原型。如果你包括两个标题,编译器会给你一个模糊调用的错误。

如果您只包含两个标头中的一个,并且编译器已确定知道要调用哪个函数(例如,对于某些#pragma comment(lib...),编译器将调用预期的函数。

如果没有.dll.lib头文件的指示,请参阅编译器调用第一个处理的文件。