第十四章動態鏈結庫

2023-02-06 23:18:03 字數 2685 閱讀 2753

第十四章動態鏈結庫(visual c++6.0 程式設計例項與技巧)

一建立s14_dll

1 這個擴充套件mfc extension dll 向應用程式提供的功能有

(1) 建立工程

(2) 設計共享資料

#pragma data_seg(".myshareddata") //宣告乙個共享資料段用於程序使用dll的記數

int count=0;

#pragma data_seg()

在s14_檔案中使用sections語句設定.myshareddata的屬性

sections

.myshareddata shared

(3) 設計dllmain入口點函式

(4) 設計檢查呼叫次數的函式

(5)設計cdrawtext類

(6)新增cdrawtext類的成員變數

public: //attribute

logfont m_font; // 字型

colorref m_color; //顏色

cstring m_str顯示的文字內容

cpoint m_pt顯示的位置

(7)新增cdrawtext類的成員函式

public:

void serialize(carchive &ar序列化

void settext(cpoint pt,lpstr str); //設定位置和文字內容

void show(cdc *pdc用於顯示

; s14_ : declares the module parameters for the dll.

library "s14_dll"

description 's14_dll windows dynamic link library'

sections

.myshareddata shared

exports

; explicit exports can go here

judgeinstanceno @1

// s14_ : defines the initialization routines for the dll.

#include ""

#include <>

#ifdef _debug

#pragma data_seg(".myshareddata")

int count=0;

#pragma data_seg()

static afx_extension_module s14_dlldll = ;

extern "c" int apientry

dllmain(hinstance hinstance, dword dwreason, lpvoid lpreserved)

else if (dwreason == dll_process_detach)

return 1; // ok

}int judgeinstanceno() //判斷是第幾個應用程式例項呼叫dll

// inte***ce for the cdrawtext class.

#endif // _msc_ver > 1000

int judgeinstanceno(); //檢查呼叫次數的函式

//注意在類名前增加afx_ext_class巨集描述,要自己寫

class afx_ext_class cdrawtext : public cobject

;// implementation of the cdrawtext class.

#include ""

#include ""

#ifdef _debug

//允許動態建立物件,這個巨集要自己寫到程式中

implement_serial(cdrawtext,cobject,0)

cdrawtext::cdrawtext()

cdrawtext::~cdrawtext()

void cdrawtext::serialize(carchive &ar) //支援序列操作

else

}void cdrawtext::settext(cpoint pt,lpstr str) //設定位置和文字內容

void cdrawtext::show(cdc *pdc) //顯示函式

二 s14a_app應用程式例程

1建立乙個單文件

2設定使用s14a_dll 將s14a_dll工程加入到s14a_app工程的工作區(workspace)中。使用project/insert projects into workspace…選單彈出的對話方塊設定,如圖下。

使用project/dependencies…選單彈出的對話方塊設定

使用project/add to project |files…選單彈出的對話方塊將s14a_dll工程生成的s14a_檔案加入到s14a_app工程中,如下圖

使用project/setting…選單彈出的對話方塊,選擇post-build step

使用project/setting…選單彈出的對話方塊,選擇link標籤下,將兩個工程都選中generate debug info,以編譯win32 debug版本產生除錯資訊,如下圖

使用project/setting…選單彈出的對話方塊,選擇debug標籤下,category選擇additional dlls,為s14a_app工程選擇附加的s14_

靜態鏈結庫與動態鏈結庫區別

動態鏈結庫 dll不必被包含在最終的exe中,exe檔案執行時可以動態地引用和解除安裝dll檔案。同時,靜態鏈結庫中不能再包含其他的動態鏈結庫或靜態庫,而動態鏈結庫中可以包含其他的動態或靜態庫。vc 支援的dll dll的編制與具體的程式語言及編譯器無關,動態鏈結庫隨處可見,vc 支援三種dll 非...

動態鏈結庫dll學習總結

1.什麼是lib檔案,lib和dll的關係如何 1 lib是編譯時需要的,dll是執行時需要的。如果要完成源 的編譯,有lib就夠了。如果也使動態連線的程式執行起來,有dll就夠了。在開發和除錯階段,當然最好都有。2 一般的動態庫程式有lib檔案和dll檔案。lib檔案是必須在編譯期就連線到應用程式...

第十四章總結

2 基本內涵 海上風險 海上航行中發生的自然災害和意外事故。外來風險 海上風險意外的其他外來原因的風險 海損 海上航行中所遇到的損失。外來風險損失 海上風險意外的其他損失。3 保險公司的賠付原則 保險賠償原則有時也稱損失補償原則。保險賠償作為財產保險活動的最後環節,是保險雙方權利義務關係的核心內容,...