通過登錄檔使用動態庫

2021-06-20 17:09:07 字數 2141 閱讀 8282

在.h檔案的宣告:

//兩個巨集指明了登錄檔中鍵所在的位置

#define sp_reg_path  "software\\xfs\\service_providers\\"

#define logicalname "tisreceiptprinter"

//為指向動態庫中函式指標定義指標類別名,用於宣告該型別的指標

typedef int(__stdcall * pprtreset) (void) ;

typedef int(__stdcall * pprtprint) (char * buffer) ;

在.cpp檔案函式外的宣告(本來這部分定義應該在.h檔案中的,可是不知道為什麼放在.h檔案中會發生多重定義的錯誤,有人知道的話請不吝指教):

//用於獲得dll檔案路徑名而用到的函式,以及乙個獲得dll的控制代碼

char gdll_name[255] ;

char glogfile[255];

hinstance handledll;

//宣告動態庫中函式的指標

pprtreset m_pprtreset;

pprtprint m_pprtprint;

接下來的要做的就是在讀取登錄檔,主要用於獲得動態庫的位址;

在函式內,先獲得登錄檔中指定的鍵:

long hkey;

char tmpstr[256];

byte tmpbyte[256];

hkey pkey;

dword tmpdw,tmplen;

//memset函式的作用就是將已申請的的空間tmpstr的首sizeof(tmpstr)個字元的值設為0

memset(tmpstr,0,sizeof(tmpstr));

memset(tmpbyte,0,sizeof(tmpbyte));

//獲得鍵的位址tempstr

strcpy(tmpstr,sp_reg_path);

strcat(tmpstr,logicalname);

//開啟鍵並獲取該鍵控制代碼的指標pkey,除錯成功時hkep的值為error_success

hkey = regopenkeyex(hkey_local_machine,tmpstr,0,key_read,&pkey);

已經獲得鍵的控制代碼,接下來讀取登錄檔中的資料:

//如同上面提到的,如果開啟鍵成功hkey就會等於error_success

if (hkey == error_success)

//獲取動態庫中的函式

m_pprtreset = (pprtreset)getprocaddress(handledll,"prtreset");

m_pprtprint = (pprtprint)getprocaddress(handledll,"prtprint");

tmplen = 255;

//從登錄檔中獲取動態庫所在的路徑,此時tembyte的值就是動態庫所在的路徑

hkey = regqueryvalueex(pkey,"workpath",null,&tmpdw,tmpbyte,&tmplen);

//如果獲得動態庫路徑成功

if (hkey == error_success)

//釋放登錄檔的控制代碼

regclosekey(pkey);

}

以上部分,是使用登錄檔獲得動態庫路徑的過程,接下來就可以開始使用動態庫了:

//這裡是通過顯示方法呼叫dll中的函式

//載入動態連線口

handledll = loadlibrary(gdll_name);

//如果控制代碼為空,說明獲取動態庫失敗

if (handledll==null)

//獲取動態庫中的函式

m_pprtreset = (pprtreset)getprocaddress(handledll,"prtreset");

m_pprtprint = (pprtprint)getprocaddress(handledll,"prtprint");

之後就可以使用動態庫中的函式m_pprtreset()和m_pprtprint()了。

禁止使用登錄檔

1 開啟登錄檔,找到hkey current user software microsoft windows currentversion policies system,如果在policies下面沒有system的話,請請在它下面新建一項 主鍵 將其命名為 system 2 然後在右邊空白處新建乙...

通過登錄檔修改MAC位址

通過登錄檔修改mac位址 2008 11 13 mac位址是繫結在網絡卡上的乙個12位 16進製制字元,它們在出廠的時候已經固化在網絡卡中,它是網絡卡在網路中的身份識別。有很多網路環境中都用到了ip和 mac繫結的情況。而 mac位址是先調入記憶體中後傳輸出去的,所以,我們可以通過修改其 mac位址...

通過登錄檔修改tcp ip篩選

regedit e d 1.reg hkey local machine system controlset001 services tcpip 匯出登錄檔裡關於tcp ip篩選的第一處 d test.exe regedit e d 2.reg hkey local machine system c...