1. 程式人生 > >VC++動態連結庫(DLL)程式設計深入淺出(四)

VC++動態連結庫(DLL)程式設計深入淺出(四)

 由於MFC擴充套件DLL匯出函式和變數的方式與其它DLL沒有什麼區別,我們不再細緻講解。下面直接給出一個MFC擴充套件DLL的建立及在應用程式中呼叫它的例子。

  6.1 MFC擴充套件DLL的建立

 下 面我們將在MFC擴充套件DLL中匯出一個按鈕類CSXButton(擴充套件自MFC的CButton類),類CSXButton是一個用以取代 CButton的類,它使你能在同一個按鈕上顯示點陣圖和文字,而MFC的按鈕僅可顯示二者之一。類CSXbutton的原始碼在Internet上廣泛流 傳,有很好的“群眾基礎”,因此用這個類來講解MFC擴充套件DLL有其特殊的功效。

  MFC中包含一些巨集,這些巨集在DLL和呼叫DLL的應用程式中被以不同的方式展開,這使得在DLL和應用程式中,使用統一的一個巨集就可以表示出輸出和輸入的不同意思:


  匯出一個類,直接在類宣告標頭檔案中使用AFX_EXT_CLASS即可,以下是匯出CSXButton類的例子:


 把SXBUTTON.CPP檔案直接新增到工程,編譯工程,得到“mfcexpenddll.lib”和“mfcexpenddll.dll”兩個檔案。我們用Visual Studio自帶的Depends工具可以檢視這個.dll,發現其匯出了眾多符號(見圖15)。

 圖15 匯出類時匯出的大量符號 (+放大該圖片)

  這些都是類的建構函式、解構函式及其它成員函式和變數經編譯器處理過的符號,我們直接用__declspec(dllexport)語句宣告類就匯出了這些符號。

 如果我們想用.lib檔案匯出這些符號,是非常困難的,我們需要在工程中生成.map檔案,查詢.map檔案的符號,然後將其一一匯出。如圖16,開啟DLL工程的settings選項,再選擇Link,勾選其中的產生MAP檔案(Generate mapfile)就可以產生.map檔案了。

 開啟mfcexpenddll工程生成的.map檔案,我們發現其中包含了圖15中所示的符號(symbol)

  圖16 產生.map檔案 (+放大該圖片)

  所以,對於MFC擴充套件DLL,我們不宜以.lib檔案匯出類。

相關推薦

VC++動態連結(DLL)程式設計深入淺出()

 由於MFC擴充套件DLL匯出函式和變數的方式與其它DLL沒有什麼區別,我們不再細緻講解。下面直接給出一個MFC擴充套件DLL的建立及在應用程式中呼叫它的例子。   6.1 MFC擴充套件DLL的建立  下 面我們將在MFC擴充套件DLL中匯出一個按鈕類CSXButton(擴充套件自MFC的CButton類

VC++動態連結(DLL)程式設計深入淺出(一)

 1.概論  先來闡述一下DLL(Dynamic Linkable Library)的概念,你可以簡單的把DLL看成一種倉庫,它提供給你一些可以直接拿來用的變數、函式或類。在倉庫的發展史上經歷了“無庫-靜態連結庫-動態連結庫”的時代。  靜態連結庫與動態連結庫都是共享代

VC++動態連結(DLL)程式設計深入淺出(三)

 第4節我們對非MFC DLL進行了介紹,這一節將詳細地講述MFC規則DLL的建立與使用技巧。  另外,自從本文開始連載後,收到了一些讀者的e-mail。有的讀者提出了一些問題,筆者將在本文的最後一次連載中選取其中的典型問題進行解答。由於時間的關係,對於讀者朋友的來信,筆者暫

VC++動態連結(DLL)程式設計深入淺出(二)

     (1)DLL匯出函式,可供應用程式呼叫;   (2) DLL內部函式,只能在DLL程式使用,應用程式無法呼叫它們。  而應用程式對本DLL的呼叫和對第2節靜態連結庫的呼叫卻有較大差異,下面我們來逐一分析。   首先,語句typedef int ( * lpAddFun)(int,int)定義了一個

Windows下的VC++動態連結程式設計

VC++動態連結庫程式設計 1、基礎概念 1.1 連結庫的概述 動態連結庫DLL(DynamicLinkable Library),你可以簡單的把它看成一種倉庫,它提供給你一些可以直接拿來用的變數、函式或類。在庫的發展史上經歷了“無庫-靜態連結庫-動態連結庫”的時代。靜態連

VC中使用動態連結DLL:靜態呼叫和動態呼叫

VC中生成DLL的辦法見:www.codeproject.com/KB/DLL/RegDLL.aspx VC中使用DLLhttp://www.cnblogs.com/c1230v/articles/1401448.html 呼叫DLL有兩種方法:靜態呼叫和動態呼叫. (一

Tensorflow安裝在windows 上面出現ImportError: DLL load failed: 動態連結(DLL)初始化例程失敗。

      最近開始學習tensorflow,電腦是win10 64位系統的,已經安裝了python3.6.1 32位的,tensorflow只支援python64位的,所以直接安裝了Python64位3.6.1。直接使用pip install tenso

c#(winform)環境下使用動態連結dll的詳解

  1,什麼是dll檔案? DLL(Dynamic Link Library)檔案為動態連結庫檔案,又稱“應用程式拓展”,是軟體檔案型別。在Windows中,許多應用程式並不是一個完整的可執行檔案,它們被分割成一些相對獨立的動態連結庫,

使用LabVIEW通過動態連結DLL遠端操作Oracle資料庫

很多情況下,遠端操作資料庫時,需要在不裝Oracle客戶端的情況下進行,儘可能降低客戶端安裝各類軟體的時間。 首先我們從網上下載Oracle資料庫操作dll檔案。 動態連結庫通過ildasm.exe反彙編檢視,這個檔案是.net 4.0版本的封裝檔案。 在LabVI

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

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

Java通過JNI 呼叫動態連結DLL

JNI(Java Native Interface)Java本地介面,主要作用是實現java程式碼與C、C++編寫的程式碼互動。 在Android程式設計中,so庫的訪問也用到了jni技術。 理論多說無益,還是看java連線dll的實戰吧。如下: 例:java中呼叫demo.

Windows動態連結DLL的使用

windows程式設計使用動態連結庫可以有效的分隔大型專案的模組,DLL裡面主要提供函式的呼叫介面(函式名)供其他的外部引用程式呼叫,呼叫者在完全不知道動態連結庫中的實現方式的情況下,仍然能根據其提供的函式名,函式型別, 和函式的引數實現呼叫。windows程式中建立DLL

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

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

動態連結 —— Dll 基礎

1. DLL 的初識   在 windows 中,動態連結庫是不可缺少的一部分,windows 應用程式程式介面提供的所有函式都包含在 DLL 中,其中有三個非常重要的系統 DLL 檔案,分別為 Kernel32.dll、User32.dll 和 GDI32.dll,下面說下這三個重要的 DLL 的用途:

動態連結dll的 靜態載入 與 動態載入

dll 兩種連結方式  : 動態連結和靜態連結(連結亦稱載入) 動態連結是指在生成可執行檔案時不將所有程式用到的函式連結到一個檔案,因為有許多函式在作業系統帶的dll檔案中,當程式執行時直接從作業系統中找。   而 靜態連結就是把所有用到的函式全部連結到exe檔案中。 動態連結是隻建立一個引用的介

QT呼叫VC 動態連結 解決QT開啟或儲存檔案時閃退的問題

1,MFC需要用靜態庫 2,MFC中字串編譯用unicode(1個漢字佔2位元組),QT中用的UTF8(1個漢字佔3位元組),因此MFC中需要將unicode轉換成UTF8 貼出QT中的程式碼:QT中做成靜態函式,方便其他位置進行呼叫 static QString Mfc

C#呼叫C/C++動態連結(.dll)詳解

第一篇編譯C的動態連線庫 在實際工作中,我們經常會將C語言中的.lib和.h檔案(靜態庫)編譯成動態連線庫.dll檔案(這裡只提供這兩種檔案,沒有完整的工程),以提供給其他語言平臺呼叫。 1,必須有.lib檔案,只有.h檔案是無法編譯動態連線庫的。 2,我使用的是V

如何建立動態連結(DLL)

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

C#呼叫動態連結DLL

1.概述 動態連結庫(Dynamic Linked Library):將寫好的函式存在庫中,以供其他程式開發呼叫,呼叫方式為“動態的”。 Windows為應用程式提供了豐富的函式呼叫,這些函式呼叫都包含在動態連結庫中。其中有3個最重要的DLL,Kerne

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

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