多个DLLMain函数

时间:2018-07-25 14:24:48

标签: c++ c visual-studio

我有一个带有DLLMain函数的C ++程序,当该程序(实际上是DLL)被另一个程序加载时,该程序会运行一些代码。一切正常。

现在,当我这次编译这个相同的C ++程序时,其中包括一个已经定义了.obj函数的DLLMain文件(由C代码制成),因此是编译器(在本例中为Windows VS2010) )抱怨DLLMain已经定义。

如果不使用链接器标志/FORCE:MULTIPLE,如何将两个DLLMain函数(在C和C ++程序中定义)同时存在并在同一最终DLL中运行?

FYI,在Linux版GCC中使用static void __attribute__((constructor)) _my_initializer(void)可以很好地工作(即两个初始化程序可以共存于同一最终.so文件中并运行)。

2 个答案:

答案 0 :(得分:1)

DLLMain函数之一重命名为其他函数(我将其命名为CDLLMain),然后从另一个DLLMain调用该重命名的函数。在决定对返回值进行处理时,在决定调用CDLLMain的位置(DLLMain中的第一件事,返回之前(如果可以的话)最后一次或中间)时,应格外小心从中(您可以继续进行DLLMain还是需要返回),以及两个DLLMain函数中潜在的重复工作。

答案 1 :(得分:0)

如果无法更改C源代码,请创建第二个DLL项目,并使基于C ++的DLL依赖于该第二个库。每个DLL都可以拥有自己的DllMain。您甚至可以使用转发导出,这样看来您的C ++ DLL从辅助库中导出了符号。

通过库的.DEF文件中的以下内容完成转发导出:

EXPORTS
EntryName=realldll.RealEntryName