win32以動態鏈結庫匯出類及其成員變數

2021-06-08 14:39:54 字數 1382 閱讀 2560

本文**:

第一,開啟vc2008 建立乙個名為sayhello的win32 dll的空專案。

第二,選擇dll空專案,選擇「插入|類」,在彈出的新建類視窗中為工程建立類csayhello。在類的標頭檔案sayhello.h中,使用關鍵字_declspec(dllexport)宣告匯出類,並定義相關的成員變數和成員函式。**如下:

//class

_declspec(dllexport) csayhello  ;

在類的實現檔案中實現各成員函式,**如下:

//#include

"sayhello.h

"#include

<

string

.h>

csayhello::csayhello()

csayhello::

~csayhello()

void

csayhello::say(

char

*szwords,

intnlen)

float

csayhello::sum()

void

csayhello::setnum(

float

fnum1,

float

fnum2)

編譯工程,在debug資料夾下生成dll檔案sayhello.dll和導入庫檔案sayhello.lib。如果採用.def檔案匯出類,就得將類的所有函式或變數均匯出。

3、呼叫dll。在視窗類標頭檔案中載入dll中的導入庫檔案,包含sayhello.h標頭檔案,並的宣告csayhello類物件。**如下:

#include

"sayhello.h

"#pragma comment(lib,

"sayhello.lib")

class

ctestdlg :

public

cdialog{//

construction

public

:ctestdlg(cwnd

*pparent

=null);    

//standard constructor

csayhello mysayhello;//這裡就可以申明dll中建立的類的成員。

此時,就可使用類物件的成員函式了。

呼叫dll中的匯出類與呼叫dll中的匯出函式最大區別就是應用程式中需包含匯出類的標頭檔案。因此,需要將sayhello.h、sayhello.dll和sayhello.lib拷貝到呼叫者工程的根目錄下,才能正確執行。

呼叫匯出類的dll一般都採用載入時鏈結的方式。雖然也可以在執行時鏈結,但實現起來會很麻煩,需要從dll中讀取每乙個成員函式的位址,而且通常這些函式的名字是預編譯的符號,可能還要在dll裡給函式重新命名。

MFC動態鏈結庫和WIN32動態鏈結庫 及區別

1 dll的構成 每個應用程式都有乙個入口函式winmain,而每個dll也有乙個入口函式dllmain。dll跟應用程式一樣都含有資源 資料段和 段。dll跟應用程式的差別主要是dll有符號輸入表和符號輸出表,以方便應用程式呼叫dll中的函式。因為dll是由應用程式載入的,所以它本身沒有虛擬的記憶...

Win32 動態鏈結庫 二

1.檔案 新建 空專案 include windows.h include stdio.h pragma comment lib,debug xxp dll test.lib extern c declspec dllimport int addfun int a,int b 匯入動態鏈結庫的add...

MFC動態鏈結庫和WIN32動態鏈結庫

1 dll的構成 每個應用程式都有乙個入口函式winmain,而每個dll也有乙個入口函式dllmain。dll跟應用程式一樣都含有資源 資料段和 段。dll跟應用程式的差別主要是dll有符號輸入表和符號輸出表,以方便應用程式呼叫dll中的函式。因為dll是由應用程式載入的,所以它本身沒有虛擬的記憶...