我有一个 C++ 程序,它有一个 DLLMain
函数,当这个程序(实际上是一个 DLL)被另一个程序加载时,该函数运行一些代码。这工作正常。
现在,当我这次编译同一个 C++ 程序时,包括一个已经定义了 DLLMain
函数的 .obj
文件(由 C 代码生成),编译器 (在这种情况下,Windows 的 VS2010)提示 DLLMain
已经定义。
如果不使用链接器标志 /FORCE:MULTIPLE
如何让两个 DLLMain
函数(在 C 和 C++ 程序中定义)共存并在同一个 final 中运行动态链接库?
仅供引用,在 GCC for Linux 中使用 static void __attribute__((constructor)) _my_initializer(void)
工作正常(即两个初始化器可以共存于同一个最终 .so
文件并运行)。
最佳答案
将其中一个 DLLMain
函数重命名为其他名称(我将其称为 CDLLMain
),然后从另一个 DLLMain
调用重命名的函数>。在决定在哪里调用 CDLLMain
时必须小心(DLLMain
中的第一件事,返回之前的最后一件事(如果这样做安全的话),或者在中间的某个地方) ,处理它的返回值(您可以在 DLLMain
中继续还是需要返回),以及两个 DLLMain
函数中潜在的重复工作。
关于c++ - 多个 DLLMain 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51521356/