WinMain从DLL导出

我试图在DLL中隐藏WinMain函数,以避免一次又一次地再次键入大部分代码。 我通过声明它从DLL导出了wWinMain
extern "C" int WINAPI wWinMain( ... )
{
    // repetitive code here
}
并使用链接器选项
/EXPORT:wWinMain
,但当我尝试在另一个项目中使用导入库时,我收到错误
LIBCMTD.lib(wincrt0.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function __tmainCRTStartup
备注我确实想使用GUI界面,我知道在定义main而不是WinMain函数时这是常见错误。此外,我在两个项目中启用了UNICODE支持。我该怎么办?     
已邀请:
这是不可能的,链接器只能将EXE的入口点设置为EXE内部的函数。将DLL中的wWinMain()重命名为其他内容。将wWinMain()写入链接到EXE的源代码文件中,只需调用DLL的导出函数即可。     
你应该在DLL中使用WinMain吗?它应该不是DllMain吗?     
如果你想调用dll的WinMain,你需要替换CRTWinMainStartup函数(你喜欢的CRT lib中的_tmainCRTStartup),并让它调用你导出的WinMain,这会阻止链接器查找本地WinMain并仍然保持正确的流量程序(CRT初创公司的源代码应该在任何编译器的crt源代码中)     
我找到一种方法将WinMain放入DLL中。 你需要使用WinMain而不是wWinMain(我不知道为什么) 将def文件附加到项目中, 在def文件中添加EXPORTS WinMain。 像这样   EXPORTS           WinMain函数    从观察中,所有需要导出的函数都生成,而不仅仅是WinMain。 经过测试,__ declspec(dllexport)的方式对WinMain无效。 将程序链接到DLL库 使用#pragma comment(lib,“testDll.lib”) 或修改项目中的设置。     
EXPORT int WINAPI _WinMain_(int (*_main_)(int argc, char **argv), HINSTANCE hInst, HINSTANCE    hPrevInstance, LPSTR commandLine, int nCmdShow);
int _XMain( int argc, char **argv );

#define XMain   WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR commandLine, int nCmdShow)
{return _WinMain_( _XMain, hInst, hPrevInstance, commandLine, nCmdShow );}  
int _XMain
然后
_WinMain_()
打电话或安排
_XMain()
。 在您的应用程序源中:
int XMain( int argc, char **argv )
{
}
    
//  ...somewhere in a .cpp file within my .dll's sources...
#define WinMain WinMainOld // ...to suppress Win32 declaration of WinMain
#include <windows.h>
#undef WinMain // ...so that WinMain below is not replaced
.   .   . 
#pragma comment(linker, "/export:_WinMain@16") // ...to export it from .dll
extern "C" // ...to suppress C++ name decoration
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     PSTR pCmdLine, int nCmdShow)
{
    .   .   .
}
    

要回复问题请先登录注册