c++ - 多个 DLLMain 函数

标签 c++ c visual-studio

我有一个 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/

相关文章:

visual-studio - 停止 Visual Studio 2013 中的“在文件中查找”搜索,该搜索将花费很长时间

c++ - 字段类型不完整

c# - 将回调参数从 C# 传递到非托管 C++

C - 打开一个文件并逐个读取一个字符,并将文件指针作为参数传递

c# - Prism 片段在带有 ReSharper 的 Visual Studio 2017 中不起作用

c# - 无法分配静态双指针变量

C++11,std::atomic 在 clang 3.2 和 libc++ 中损坏了吗?

c++ - Valgrind 找不到无效的写入

c - 如何正确使用 sem_timedwait()

我可以使用 2 种语言制作 1 个程序吗?