VC 6 0中控制執行唯一例項

2021-04-06 15:11:28 字數 1433 閱讀 7333

1.在mfc應用程式中加入乙個mfc extension dll

2.實現共享資料和匯出函式

用#pragma data_seg指令實現共享資料段。在single.cpp包含標頭檔案的語句後新增下列語句:

#pragma data_seg(".shareddata")

long m_nrun=-1;

#pragma data_seg( )

其中,.shareddata就是我們實現的共享資料段的名稱。這個資料段只包含乙個變數long m_nrun,初始值為-1。

下面在single.def檔案中使用sections語句設定該共享資料段的屬性:

sections

.shareddata read write shared

這樣就使得使用這個dll的應用程式能以讀寫方式共享.shareddata中定義的變數。

然後設計檢查程式已執行例項個數的函式並匯出,仍然使用def檔案:

exports

; explicit exports can go here

judgeno @1

所要新增的只是judgeno @1這一條語句,意思是judgeno是第乙個輸出函式,如果需要,還可以新增其他函式。judgeno的實現是在single.cpp中。

long judgeno( )

這裡只是簡單的返回了m_nrun的值,因為這個函式是**用程式呼叫的。同時還要在single.cpp的入口點函式dllmain返回成功值的語句前新增語句m_nrun++,意思是在應用程式啟動連線dll成功時對已經執行的例項進行計數。這裡需要強調的是dll共享資料的概念,它指的是多程序呼叫dll時記憶體中只儲存資料的乙個副本供它們共同擁有,因此這裡的變數m_nrun可以起到為程式所有執行的例項計數的作用。

3.應用程式呼叫judgeno( )

我們先在dll中新增乙個類,這樣應用程式通過包含這個類的標頭檔案就可以呼叫judgeno( )。選擇insert|new class…選單,彈出對話方塊後,在class type中選擇generic class,新建立乙個無任何基類的cout類,預設的檔名是out.h和out.cpp,由vc++自動生成。在out.h的類成員宣告之前加上語句long judgeno()即可。完成之後將out.h拷貝到應用程式的工程目錄下。

選擇project|dependencies…選單,將應用程式的工程設定為依賴於single工程。在應用程式應用類的實現檔案中新增#include "out.h"。然後在initinstance( )函式的開頭新增如下**:

if(judgeno())

編譯後將生成的single.dll拷貝到windows安裝目錄的system子目錄下,該目錄存放有系統所有的dll檔案。執行程式,如果是第二次執行,則會彈出對話方塊顯示"程式已執行!"。說明dll實現了對程式執行例項的計數。

本例中通過使用dll完成了控制應用程式執行唯一例項,同時也能使初學者對dll程式設計的關鍵技術有乙個初步的體會。

VC 6 0中控制執行唯一例項

1.在mfc應用程式中加入乙個mfc extension dll 2.實現共享資料和匯出函式 用 pragma data seg指令實現共享資料段。在single.cpp包含標頭檔案的語句後新增下列語句 pragma data seg shareddata long m nrun 1 pragma ...

vc 6 0軟體出錯 (一)

一般來說,就我所遇見的情況可以大致分兩類,一是軟體安裝完成後無法執行,二是在新建工程後編譯執行報錯 第一種情況,多數是安裝路徑不一致,容易造成,解決方法只能是卸了重灌,最好都放在乙個盤裡,注意用360強力卸完後一定要把殘留相關的登錄檔和資料夾都刪了,不保證一定i能成功,除此電腦32 64位也要分別選...

在VC6 0中的除錯

3.設定資料斷點,和上面不同也就是表示式,換成了乙個全域性變數,並且在斷點對話方塊中,選中data選項卡,然後輸入全域性變數名,那麼當這個全域性變數的值發生給變時,程式就會中斷。4.設定訊息斷點 就是指斷點與訊息及相應的訊息處理函式 當某個訊息處理函式處理了乙個斷點訊息,程式將在訊息處理函式處中斷。...