首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个DLLMain函数

多个DLLMain函数
EN

Stack Overflow用户
提问于 2018-07-25 22:24:48
回答 2查看 468关注 0票数 0

我有一个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文件中并运行)。

EN

回答 2

Stack Overflow用户

发布于 2018-07-25 23:17:18

将其中一个DLLMain函数重命名为其他名称(我将其命名为CDLLMain),然后从另一个DLLMain调用重命名的函数。在决定在哪里调用CDLLMain ( DLLMain中的第一件事,返回之前的最后一件事(如果这样做是安全的),或者中间的某个地方),在处理它的返回值时(可以在DLLMain中继续还是需要返回),以及两个DLLMain函数中潜在的重复工作,都必须小心。

票数 1
EN

Stack Overflow用户

发布于 2018-07-25 23:27:11

如果不能更改C源代码,则创建第二个DLL项目,并使基于C++的DLL依赖于该第二个库。每个DLL都可以有自己的DllMain。您甚至可以使用转发导出,以便您的C++ DLL从辅助库中导出符号。

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

代码语言:javascript
复制
EXPORTS
EntryName=realldll.RealEntryName
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51521356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档