WIN32 DLL中使用MFC


最近用WIN32 DLL,為了方便要用到MFC的一些庫,又不想轉工程,就網上找了很多方法,發現沒有詳細的介紹,有的也行不通,現在成功在WIN32 DLL中使用了MFC,記錄一下以防以后用到忘記

 

一、修改預編譯頭文件(stdafx.h)

在stdafx.h文件中添加下面代碼,包含一些MFC的頭文件,這些可以在一個MFC工程中復制過來

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS    // 某些 CString 構造函數將為顯式的

#include <afxwin.h>         // MFC 核心組件和標准組件
#include <afxext.h>         // MFC 擴展

#ifndef _AFX_NO_OLE_SUPPORT
#include <afxole.h>         // MFC OLE 類
#include <afxodlgs.h>       // MFC OLE 對話框類
#include <afxdisp.h>        // MFC 自動化類
#endif // _AFX_NO_OLE_SUPPORT

#ifndef _AFX_NO_DB_SUPPORT
#include <afxdb.h>            // MFC ODBC 數據庫類
#endif // _AFX_NO_DB_SUPPORT

#ifndef _AFX_NO_DAO_SUPPORT
#include <afxdao.h>            // MFC DAO 數據庫類
#endif // _AFX_NO_DAO_SUPPORT

#include <afxdtctl.h>        // MFC 對 Internet Explorer 4 公共控件的支持
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>            // MFC 對 Windows 公共控件的支持
#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入口點

 

只是在鏈接那一塊還是出了幾個錯誤,
error LNK2005: "private: __thiscall type_info::type_info。。。

最后用的:
附加依賴項:msvcrtd.lib LIBCMTD.lib
忽略特定庫:LIBCMTD.lib;msvcrtd.lib

編譯通過了,MFC的類編譯器也認識了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM