2011-03-10 32 views
2

我最近遇到一個使用MFC對話框的DLL(github)(例如,它導入"afxdlg.h"並調用CFileDialog),並且似乎靜態鏈接到MFC,但沒有基於CWinApp的類。我有點困惑:是不是MFC DLL?它怎麼沒有CWinApp使用MFC而不使用CWinApp的DLL?

改寫:在一個Win32 DLL我使用一些MFC類(例如我包括"afxdlgs.h"並使用CFileDialog)和鏈接MFC靜態。沒有DllMain。最後的DLL是否具有來自Win32或MFC的DllMain

如果選擇MFC版本,那麼另一個問題:使用DllMain(無線程)使用MFC DllMain來製作Win32 DLL的最簡單方法是什麼?以下是否正確?

#include "afx.h" /* correct? */ 

class MyDll: public CWinApp 
{ 
public: 
    /* do I need constructor and destructor here? */ 
    virtual BOOL InitInstance(); 
    virtual BOOL ExitInstance(); 
} theDll; 

BOOL 
MyDLL::InitInstance() 
{ 
    CWinApp::InitInstance(); 
    /* code from old DllMain, DLL_PROCESS_ATTACH. 
     For hInst use theDll.m_hInstance */ 
    return TRUE; 
} 

BOOL 
MyDLL::ExitInstance() 
{ 
    /* code from old DllMain, DLL_PROCESS_DETACH */ 
    return CWinApp::ExitInstance(); 
} 

回答

1

我認爲一個標準的DLL轉換爲MFC DLL最簡單的方法是讓一個新的MFC DLL的項目,然後使用生成的文件和你的代碼的其餘部分粘貼到其中。

AFAIK在源文件中沒有區別,但在鏈接器設置中有一些。從一個新項目開始可以節省大量時間和麻煩。