1. 程式人生 > >建立MFC動態連結庫注意事項

建立MFC動態連結庫注意事項

1、按照正常的流程建立MFC動態連結庫工程,將已經編譯除錯好的CPP檔案與標頭檔案載入到該工程中,需要注意此處很關鍵,新新增的每個類,在類名前新增以下巨集使每個類的函式可以到處到動態連結庫中

AFX_EXT_CLASS

class AFX_EXT_CLASS CBasicFunc
{
}

如果不新增該巨集該類中的函式無法匯出到動態庫中。而對於動態庫中需要新增的全域性變數則需要新增以下巨集

AFX_EXT_DATA
export AFX_EXT_DATA bool g_bThread;
則該變數g_bThread可以匯出到動態連結庫中

2、如果動態庫中涉及呼叫對話方塊類,並實現與對話方塊介面的互動則需要在例項化對話方塊類的時候,在其前面新增以下語句否則在互動過程中會出錯

AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
注意:該語句一定要新增在例項化之前,否則呼叫該例項的函式實現介面互動時會出現bug

同時在對話方塊類的標頭檔案中要包含resource.h這個標頭檔案,否則在呼叫該動態庫時會出現找不到對話方塊的ID

在使用mfc動態dll的時候,編譯出現了n個警告:warning C4273: dll 連結不一致,而連結的時候出現n個“無法解析的外部符號”的錯誤,直接導致了編譯失敗。

      解決方法:右擊dll工程 -- 屬性,開啟屬性頁,展開:配置屬性 -- C++ --前處理器,在前處理器定義的最後面填入:_AFXEXT,再次編譯則搞定。

同時,需要注意,如果建立的DLL中包含結構體,結構體中有std::string型別的變數,在呼叫DLL時需要DEBUG版本呼叫DEBUG版本的DLL,Release版本呼叫Release版本的DLL,否則在呼叫DLL使用結構體時string型別變數會出現“讀取字串的字元時出錯”,導致錯誤

相關推薦

建立MFC動態連結注意事項

1、按照正常的流程建立MFC動態連結庫工程,將已經編譯除錯好的CPP檔案與標頭檔案載入到該工程中,需要注意此處很關鍵,新新增的每個類,在類名前新增以下巨集使每個類的函式可以到處到動態連結庫中AFX_EXT_CLASS即class AFX_EXT_CLASS CBasicFun

Unity呼叫c++動態連結注意事項

Unity通過ndk呼叫java,java通過jni呼叫c++ .so 1:Jni的.so是獨立的,還是依賴其他.so庫或靜態庫? 答:都可以,但具體的.so拷貝到unity中後,是否還能正常呼叫,有待測試。 2:C++中jni與java回撥函式,這裡只舉例靜態函式呼叫

建立一個MFC動態連結

       還沒好好的學習一下MFC,之前學過一段時間的QT,現在發現MFC與QT其實很相似,都很詳細的提供了介面庫,可能在具體的細節方面有不同吧,等著去發現。 一、建立DLL檔案 1、新建工程檔案

MFC動態連結呼叫詳解

MFC動態連結庫的呼叫,有好多種方式,這裡只介紹一種簡單的呼叫的方式,只需要把動態連結庫編譯後的.dll檔案放到呼叫介面的Debug下面。再在介面需要呼叫動態連結庫裡新增相關函式就行了。找了好多資料,發現沒有詳細的介紹,下面就是從動態連結庫建立開始,一點點詳細的

VC6.0建立DLL動態連結四大要素

要成功地編輯,編譯和連結一個動態連結庫,應該包括以下要素:建立工程檔案,使用輸出說明,應用初始化函式和編制函式功能。 1.       建立工程檔案 在選取型別的時候要選擇“Dynamic __Link Library”或者“MFC AppWizard(DLL)”。 2.使

動態連結(DLL)的建立和使用

最近想做個記錄日誌的C++庫,方便後續使用。想著使用動態庫,正好沒用過,學習下。概念這裡不贅述。學習過程中碰到的幾點,記錄下來。學習是個漸進的過程,本文也是一個逐漸完善的過程。 一、Static Library 標準Turbo 2.0中的C函式庫(scanf、pringf、memc

14 編譯與連結過程以及MFC靜態/動態連結的呼叫

0 引言 在Windows作業系統中,幾乎所有的內容都是以DLL的形式存在的。例如顯示的字型和圖示儲存在GDI.DLL中;顯示Windows桌面、處理使用者輸入所需要的程式碼唄儲存在User.DLL中;Windows程式設計所需要的大量API函式儲存在Kernel.DLL中。   1 編譯連結

動態連結隱式建立和呼叫

1.建立 我選的WIN32控制檯,下一步,勾DLL選項。 在專案新建一個類,在類前面加__declspec(dllimport) #define MYDLL  __declspec(dllexport)#else#define MYDLL  __declspec(dl

MFC/Qt下呼叫caffe原始碼(一)---將caffe原始碼生成動態連結dll

本人研一,最近想將用caffe訓出的模型,通過MFC做出一個介面,扔進一張圖片,點選預測,即可呼叫預測分類函式完成測試,並且通過MessageBox彈出最終分類的資訊。 首先通過查資料總結出兩種方法,第一:直接呼叫編譯好的caffe原始碼;(本次用到的原始碼是classif

VS製作動態注意事項

匯出函式 當我們需要匯出函式的時候,應該考慮的是以標準呼叫約定(stdcall)的形式提供給使用者。具體的呼叫約定的區別可以參考下文。 https://blog.csdn.net/chenlycly/article/details/51329886 在介面宣告檔案中,我們需要定義

Windows下用Codeblocks建立一個最簡單的DLL動態連結

建立一個最簡單的只有一個get_id() 函式的DLL庫  一、建立C語言動態連結庫 1.新建一個動態庫的工程 File - New - Project - DLL - Go 新建的工程原來的main.cpp和main.h刪除,新建兩個檔案simple.

codeblocks中建立和呼叫動態連結(dll)

一、建立C語言動態連結庫 1.建立。 File->New->Projects->Dynamic Link library->Go 給專案命名為:Dynamic librar

Codeblocks建立和呼叫DLL動態連結(C語言)

建立一個最簡單的只有一個get_id() 函式的DLL庫  一、建立C語言動態連結庫 1.新建一個動態庫的工程 File - New - Project - DLL - Go 新建的工程原來的main.cpp和main.h刪除,新建兩個檔案simple.h, simple

Linux動態連結 so檔案的建立與使用

1. 介紹         使用GNU的工具我們如何在Linux下建立自己的程式函式庫?一個“程式函式庫”簡單的說就是一個檔案包含了一些編譯好的程式碼和資料,這些編譯好的程式碼和資料可以在事後供其他的程式使用。程式函式庫可以使整個程

Windows環境下建立並使用動態連結(CodeBlocks版)

首先建立動態連結庫工程,工程名為test。 然後將下面這段程式碼複製到main.cpp裡去。 #include "main.h" EXPORT int sum (int a, int b) {

QT建立和使用動態連結

1、首先建立庫檔案 2、選擇所需模組 3、順序確認完成後,如下圖 注意:上圖中keycomm_global.h中的內容可以複製到keycomm.h中去,在以後呼叫時只調用keycomm.h即可,否則呼叫時需要兩個標頭檔案同事使用。 4、在keycomm.h和keycomm

MFC程式動態連結缺失的解決方法

      我們在用VS2010編寫MFC程式的時候,我們有時候會發現自己寫的程式在別人的電腦上執行時會報錯,說是動態連結庫的丟失.比如說“缺少mfc100d.dll檔案”。解決方法如下:    1:點選VS2010的專案->屬性->配置屬性->常規;

如何建立動態連結(DLL)

動態連結庫 n動態連結庫通常不能直接執行,也不能接受訊息。他們是一些獨立的檔案,其中包含能被可執行程式或其他DLL呼叫來完成某項工作的函式。只有在其他模組呼叫動態連結庫中的函式時,它才發揮作用

使用VS2008建立和呼叫動態連結

    如果工程比較大,則可以在本地硬碟的其它位置新建一個資料夾,命名為myDTest,再新建三個子資料夾bin,include和lib,將DLL檔案放到bin中,H檔案放到include中,LIB檔案放到lib中。計算機->屬性->高階系統設定->環境變數。在系統變數->新建->

vs2010 建立和C#使用動態連結(dll)

一、VS 用 C++ 建立動態連結庫 Step 1:建立Win32 Console Application 本例中我們建立一個叫做“Test”的Solution。 Step 2:將Ap