【问题标题】:Can Windows call the WinMain function in a Static Library C++Windows 可以在静态库 C++ 中调用 WinMain 函数吗
【发布时间】:2020-08-31 10:33:15
【问题描述】:

我创建了一个静态库,其中包含一个必须调用的 WinMain() 函数。我正在寻找一些方法让 windows 调用这个函数。

原因是有一个没有主函数的解决方案,用户只是继承并填充一些类,如果他点击播放按钮,解决方案就会运行。

另外,如果您认为我的方法不是最好的,请告诉我您将如何负担得起。

【问题讨论】:

  • 这应该“正常工作”。链接器将在传递给它的目标文件和静态库中搜索名为“WinMain”(装饰)的函数。显示您尝试了什么以及遇到了什么错误。
  • 为什么静态library 应该有main? :S.. 当我将它与已经有一个主程序的程序链接时会发生什么?在 GCC 中,您可以拥有 __attribute__((constructor))__attribute__((destructor)) 但我认为它仅适用于动态库。不太确定。
  • @Brandon 这就是 CRT 库的工作方式,例如,为了在 它们 调用用户定义的 main 之前“注入”它们的初始化代码。
  • @Brandon:许多平台/框架都是这样工作的,入口点在框架代码中,所有用户代码都是事件驱动的。事实上,在 C++ 中,“main()”或“WinMain()”函数甚至都不是真正的入口点,工具链会安排其构建全局对象的启动代码首先运行。
  • 解决方案只是项目的容器。您将需要一个静态库项目和一个包含(链接)静态库的可执行项目。静态库不能单独执行...另外,您会丢失应该由用户填写的部分。

标签: c++ windows visual-studio static-libraries .lib


【解决方案1】:

您可以添加#pragma comment(linker, "/entry:fn")来修改入口功能。也可以参考Microsoft documents

【讨论】:

    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多