我有一个C++程序,它有一个DLLMain函数,当这个程序(实际上是一个动态链接库)被另一个程序加载时,它会运行一些代码。这工作得很好。
现在,当我编译这个相同的C++程序时,这次包含一个已经定义了DLLMain函数的.obj文件(由C代码生成),编译器(在本例中是VS2010 for Windows)报告已经定义了DLLMain。
如果不使用链接器标志/FORCE:MULTIPLE,如何让两个DLLMain函数(在C和C++程序中定义)在同一个最终的DLL中共存并运行?
仅供参考,在使用static void __attribute__((constructor)) _my_initializer(void)的Linux的GCC中工作良好(即两个初始化器可以共存于相同的最终.so文件中并运行)。
发布于 2018-07-25 23:17:18
将其中一个DLLMain函数重命名为其他名称(我将其命名为CDLLMain),然后从另一个DLLMain调用重命名的函数。在决定在哪里调用CDLLMain ( DLLMain中的第一件事,返回之前的最后一件事(如果这样做是安全的),或者中间的某个地方),在处理它的返回值时(可以在DLLMain中继续还是需要返回),以及两个DLLMain函数中潜在的重复工作,都必须小心。
发布于 2018-07-25 23:27:11
如果不能更改C源代码,则创建第二个DLL项目,并使基于C++的DLL依赖于该第二个库。每个DLL都可以有自己的DllMain。您甚至可以使用转发导出,以便您的C++ DLL从辅助库中导出符号。
转发导出是通过库的.DEF文件中的以下内容完成的:
EXPORTS
EntryName=realldll.RealEntryNamehttps://stackoverflow.com/questions/51521356
复制相似问题