我有一个带有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
文件中并运行)。
答案 0 :(得分:1)
将DLLMain
函数之一重命名为其他函数(我将其命名为CDLLMain
),然后从另一个DLLMain
调用该重命名的函数。在决定对返回值进行处理时,在决定调用CDLLMain
的位置(DLLMain
中的第一件事,返回之前(如果可以的话)最后一次或中间)时,应格外小心从中(您可以继续进行DLLMain
还是需要返回),以及两个DLLMain
函数中潜在的重复工作。
答案 1 :(得分:0)
如果无法更改C源代码,请创建第二个DLL项目,并使基于C ++的DLL依赖于该第二个库。每个DLL都可以拥有自己的DllMain。您甚至可以使用转发导出,这样看来您的C ++ DLL从辅助库中导出了符号。
通过库的.DEF文件中的以下内容完成转发导出:
EXPORTS
EntryName=realldll.RealEntryName