測試環境:Win7 64位 + VC 6.0
最近玩一款網頁游戲,想着自己做個模擬輔助用用,於是下載了一個大漠插件,但是各種注冊就是不成功,通過查閱網上各位前輩的資料,終於將問題解決,現將方法分享給大家,如有什么不正確的地方還請大家指正。
注意的幾點:
1、大漠插件必須要注冊之后才能使用。
2、注冊時要保證dm.dll,在你要注冊的路徑下。
3、使用大漠函數時,要加上dm.h頭文件
首先,大漠的DLL,不是普通的DLL,它是一個Active x插件,必需要注冊之后才能使用,注冊是否成功可以用dm.GetBasePath() 函數看看能否獲得正確的路徑,獲取不到表示注冊不成功。
1、建立一個MFC對話框工程,默認完成就行。
我們給對話框添加兩個按鈕
雙擊兩個對話框添加按鈕的響應函數,然后按下快捷鍵Ctrl + W,打開類向導如圖
在右上角的添加類中選擇第二項,添加我們下載的dm.dll,然后出來如下圖的添加類向導,OK就可以了
這時候在VC的類視圖列表中就多了一個Idmsoft類
這個類的源文件就是dm.h dm.cpp,我們可以看到大漠插件提供的接口函數就在這里定義實現的,所以如果我們要在別的源文件中使用這些函數,別忘了包含dm.h頭文件。
2、接着我們就來注冊大漠插件dm.dll
首先我們自定義一個注冊DLL的函數,該函數最好寫成Dlg類的成員函數
BOOL RegistryDll(CString& szDllPath) { LRESULT (CALLBACK* lpDllEntryPoint)(); HINSTANCE hLib =LoadLibrary(szDllPath); if (hLib < (HINSTANCE)HINSTANCE_ERROR) { return FALSE; } (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer"); BOOL bRet = FALSE; if (lpDllEntryPoint != NULL) { HRESULT hr = (*lpDllEntryPoint)(); bRet = SUCCEEDED(hr); if (FAILED(hr)) { AfxMessageBox("×¢²áʧ°Ü"); } } FreeLibrary(hLib); return bRet; }
然后注冊按鈕中實現方式如下:
//注冊
void CMFC_Dlg::OnBtnRegist()
{
CString strFilePath;
char strBuff[256];
GetCurrentDirectory(256,strBuff);
strFilePath.Format("%s\\dm.dll",strBuff);
RegistryDll(strFilePath);
}
這樣大漠插件就注冊完畢了,在測試按鈕中我們可以調用它測試一下
3、測試按鈕中代碼如下:
測試之前一定要保證工程目錄中有dm.dll 放到dm.h和dm.cpp所在的目錄,當然這取決於你注冊時的路徑。
void CMFC_Dlg::OnBtnTest()
{
Idmsoft dm; ::CoInitialize(NULL);//初始化線程com庫
dm.CreateDispatch("dm.dmsoft");
CString strPath = dm.GetBasePath();//獲取注冊到系統中的dm.dll的路徑
AfxMessageBox(strPath);
}
這樣運行起來的結果就是這樣,某數字公司會檢測到你的注冊
測試結果如下圖: