Atl CDialogImpl如果从静态库调用,则不会在DoModal上显示

我在一个项目中写了一个超级简单的ATL对话框。 即使当我注意到Web上的每个示例都实现了CDialogImpl类的内联(也就是类定义和它在定义本身中的实现)时,我通常会写它,将.h文件中的定义和.cpp文件。 这个课程总结如下:

CMainDialog.hpp

class CMainDialog: public CDialogImpl<CMainDialog> { public: enum { IDD = IDD_MYDIALOGS_DIALOG}; BEGIN_MSG_MAP(CMainDialog) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_ID_HANDLER(IDCANCEL, OnCancel) END_MSG_MAP() CMainDialog(); ~CMainDialog(); LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnCancel(UINT uMsg, WORD wID, HWND hWndCtl, BOOL& bHandled); } 

CMainDialog.cpp

 CMainDialog::CMainDialog() { } CMainDialog::~CMainDialog() { } LRESULT CMainDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { } LRESULT CMainDialog::OnCancel(UINT uMsg, WORD wID, HWND hWndCtl, BOOL& bHandled) { } 

如果我从同一个项目调用这个类,一切都很顺利。 对话框显示。 例:

调用DoModal

 int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); CMainDialog dialog; dialog.DoModal(); return 0; } 

所以我将这个项目从.exe转换为static library并删除_tWinMain。 所以,如果我创build一个新的ATL项目,引用我新创build的库,并调用CMainDialog.DoModal …好吧,没有任何反应。 构造函数确实被调用,但消息从不开始调度,并且程序以中介结束。 也许我错过了什么?

我完全是新的Win32编程(虽然绝对不是新的C ++),所以任何帮助,将不胜感激。

静态库没有与之关联的资源。 对话框代码很可能试图从程序资源加载对话框模板,但找不到它。