在WIN32 DLL中使用MFC
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接


最近用WIN32 DLL,為了方便要用到MFC的一些庫,又不想轉工程,就網上找了很多方法,發現沒有詳細的介紹,有的也行不通,現在成功在WIN32 DLL中使用了MFC,記錄一下以防以后用到忘記
一、修改預編譯頭文件(stdafx.h)
在stdafx.h文件中添加下面代碼,包含一些MFC的頭文件,這些可以在一個MFC工程中復制過來

1 #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 構造函數將為顯式的
2
3 #include <afxwin.h> // MFC 核心組件和標準組件
4 #include <afxext.h> // MFC 擴展
5
6 #ifndef _AFX_NO_OLE_SUPPORT
7 #include <afxole.h> // MFC OLE 類
8 #include <afxodlgs.h> // MFC OLE 對話框類
9 #include <afxdisp.h> // MFC 自動化類
10 #endif // _AFX_NO_OLE_SUPPORT
11
12 #ifndef _AFX_NO_DB_SUPPORT
13 #include <afxdb.h> // MFC ODBC 數據庫類
14 #endif // _AFX_NO_DB_SUPPORT
15
16 #ifndef _AFX_NO_DAO_SUPPORT
17 #include <afxdao.h> // MFC DAO 數據庫類
18 #endif // _AFX_NO_DAO_SUPPORT
19
20 #include <afxdtctl.h> // MFC 對 Internet Explorer 4 公共控件的支持
21 #ifndef _AFX_NO_AFXCMN_SUPPORT
22 #include <afxcmn.h> // MFC 對 Windows 公共控件的支持
23 #endif // _AFX_NO_AFXCMN_SUPPORT

二、修改編譯配置
我使有的是VS2003
1、項目->屬性->常規->MFC的使用->在靜態庫中使用MFC(動態或靜態都可以)
2、鏈接器->輸入->
因為編譯的時候會因為鏈接的順序問題導致鏈接錯誤,所以這里要改兩個LIB的鏈接順序
先在‘忽略指定庫中’忽略掉這兩個DLL,分別是uafxcw.lib和libcpmt.lib,如果是DEBUG工程,還需要填入libcmt.lib
再在'附加依賴項'中以uafxcw.lib libcpmt.lib的順序填入
三、在你的主文件中加入代碼
在最前面加入

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define new DEBUG_NEW
/////////////////////////////////////////////////////////////////////////////
// global data
// The following symbol used to force inclusion of this module for _USRDLL
#ifdef _X86_
extern "C" { int _afxForceUSRDLL; }
#else
extern "C" { int __afxForceUSRDLL; }
#endif

這樣不用從CWinApp中派生一個類再外部定義來使用MFC的入口點,可以直接使用原來的寫好的DllMain入口點
謝謝觀看!
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成