回覆列表
  • 1 # orzuy2294

    因為使用了MFC,所以你只能建立一個MFC動態庫,而不是win32動態庫。並且用AFX_EXT_CLASS 標記放在你的類名前面。相關資料見下文。 如何在VC中匯出類,這是一個常有人問起的問題,下面我以一個簡單的例子來說明這個問題: 首先使用Wizard建立一個Win32 Dynamic-Link Library工程,然後定義一個簡單的C++類CInDLL。由於該類會 被工程之外的檔案所引用,所以需要對這個類進行引出。因為只有引出後所生成的DLL中才帶有供足夠的資訊以在連線和執行時被正確引入到程序空間中。有兩種 方法可以引出類,使用__declspec(dllexport)定義和使用定義檔案。 下面先講使用__declspec(dllexport)的方法:將類定義改為:class __declspec(dllexport) CInDLL 就可以了。(譯者:你也許不相信會有這麼簡單,我也不相信。:-) 這樣產生的工程在編譯時是正確的但是在使用時會產生錯誤,因為你包含 的標頭檔案中也是使用__declspec(dllexport),而使用這個DLL的工程中並沒有引出這個類,而是需要引入這個類)在使用時需要將類定義 改為class __declspec(dllimport) CInDLL就可以了。 使用定義檔案可以有效的避免這個問題,這種方法是利用宏定義在不同的地方產生不同的編譯程式碼:在標頭檔案中加入如下的程式碼: #ifdef _CLASSINDLL #define CLASSINDLL_CLASS_DECL __declspec(dllexport) #else #define CLASSINDLL_CLASS_DECL __declspec(dllimport) #endif #endif // ClassInDLL_H //將class __declspec(dllexport) CInDLL改為 class CLASSINDLL_CLASS_DECL CInDLL { CInDLL(); ... } 在實現這個類的CPP檔案的頂部加入#define _CLASSINDLL語句。 #define _CLASSINDLL CInDLL::CInDLL() { } ... 這樣一來在使用這個類時就可以不做任何改動了。 (譯者:這中方法在沒有使用MFC時可以使用,如果你使用MFC生成MFC DLL那麼只要做如下定義就可以了class AFX_EXT_CLASS yourClass)

  • 中秋節和大豐收的關聯?
  • 商城網站都有哪些功能,網上商城的功能模組?