我想要一个带有窗口创建和管理代码的 DLL,开发人员只需添加一个命名的 main.h 标头并加载 DLL 即可实例化一个窗口。
#include "dllheader.h"
void user_main();
main = user_main; // attach user main to the dll callback
int user_main() {
Window *w = new Window();
}
Run Code Online (Sandbox Code Playgroud)
在 DLL 端,代码应该如下所示
void (*main)() = NULL;
int WinMain(...) {
if(main)
main(); // call the user defined funcion
while(!done) {
if(messageWaiting()) {
processMessage();
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么?因为我想部署一个窗口包装器并避免让用户编写 WinMain 入口点。但是 DLL 项目有一个 DLL main 和一个 win32 项目,如果链接器没有找到 winMain 入口点,则该项目使用 DLL complaim。
这种安排有已知的解决方案吗?
小智 3
每个 Win32 应用程序都必须有一个入口点(通常是 WinMain)。所以你不能把入口点放在DLL中,因为它实际上并不是EXE的一部分。但是,入口点可以位于静态链接库中。当静态库被链接时,入口点成为 EXE 的一部分。
但我的建议是避免所有这些复杂性。只需让 DLL 的用户调用如下内容即可:
int WinMain( HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow )
{
return WrapperDllMain( hInstance, hPrev, lpCmdLine, nCmdShow, &user_main );
}
Run Code Online (Sandbox Code Playgroud)
代码简单,容易编写。DLL 用户不需要付出太多努力。您可以完全控制消息循环(以及整个进程生命周期)。
归档时间: |
|
查看次数: |
2779 次 |
最近记录: |