設定dll的共享資料段

2021-06-22 11:56:30 字數 1212 閱讀 9353

bcb直接在dll中定義共享記憶體單元的步驟如下:

假設dll的工程名為mousehook.bpr(編譯後產生mousehook.dll)

1.在一程式模組 unit1.cpp的最前面加上:

#pragma option -zrshseg      // 改變預設資料段名

#pragma option -ztshclass    // 改變預設資料類名

則該模組內定義的全域性變數都將是dll共享的,但dll有其它程式模組(unit2.cpp等),則其它模組中的全域性變數仍是非共享的,如果也要共享,則同樣須在第二個模組的最前面加 上類似的兩行語句,你甚至可以換乙個資料段名和類名,如:

#pragma option -zrsh2seg     // 改變預設資料段名

#pragma option -ztsh2class   // 改變預設資料類名

2.新建一與工程同名 但型別為 .def 的純文字檔案,本例是mousehook.def, 並 將此檔案mousehook.def用project->add project增加到工程中;其內容要求把上面用到的每一

segments    shseg     class     'shclass'   shared

segments    sh2seg    class     'sh2class'  shared

3.注意:若定義了乙個共享的指標變數,則用new為其申請的記憶體塊仍是區域性的,區域性記憶體單元是不能被共享訪問的,否 則會出現無效訪問,同樣地,dll中若有視窗模組,只能是區域性視窗;

// 下面的程式將產生有三個匯出函式的mousehook.dll

// 純文字檔案  mousehook.def的內容如下:

// segments    shseg    class    'shclass'  shared

#pragma option -zrshseg      // 改變預設資料段名

#pragma option -ztshclass    // 改變預設資料類名

#include

#pragma argsused

// 以下都將是共享區記憶體變數

point  mouseloc=;      // 存放滑鼠位置

hhook  newhook=null;        // 存放新鉤子控制代碼

int    loadcount=0;         // dll裝入次數計數

hinstance  dllhinst;

DLL 中的共享資料

全域性共享資料的實現 在主檔案中,用 pragma data seg建立乙個新的資料段並定義共享資料,其具體格式為 pragma data seg shareddata hwnd sharedwnd null 共享資料 pragma data seg 僅定義乙個資料段還不能達到共享資料的目的,還要告...

多例項共享資料段的例子

為了阻止乙個程式的多個例項同時執行,除了用createmutex的方法外還可以用 共享資料段的方法。pragma data seg singleinstance 預處理指令用於設定共享資料段,名稱為singleinstance bool exist false 對變數進行定義,並初始化,否則微軟編譯...

wifi共享dll的實現

現在筆記本建立wifi熱點的軟體比比皆是,那我們也來自己做乙個試試看。using system using system.collections.generic using system.linq using system.text using system.diagnostics using sy...