VC++ 등록 DLL

2468 단어

VC++ 등록 DLL


1.dll 등록

#include <Shlwapi.h>   
#pragma comment(lib, "Shlwapi.lib")    
  


//RegistryDll    DLL,   DLL    ,             (TRUE   )。   
BOOL RegistryDll(CString& szDllPath)   
{   
    if (!(PathFileExists(szDllPath) && (!PathIsDirectory(szDllPath))))   
    {   
        wprintf(L"  %s      ,    :      !\r
", szDllPath); // , OutputDebugString return FALSE; } 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)) { CString szErrMsg; if (GetErrMessage(hr, szErrMsg)) { wprintf(L" %s , :%s\r
", szDllPath, szErrMsg); } else { wprintf(L" %s , , , :x%08x\r
", szDllPath, hr); } } } FreeLibrary(hLib); return bRet; }

2. dll 등록 거부


//UnRegistryDll은 DLL을 반등록하는 데 사용되며, 매개 변수는 DLL의 전체 경로이며, 반환 값은 등록이 성공했거나 실패했음을 의미한다(TRUE는 성공이다). BOOL UnRegistryDll(CString& szDllPath) { if (!(PathFileExists(szDllPath) && (!PathIsDirectory(szDllPath)))) { lprintf(L "%s 파일을 반등록할 때 오류가 발생했습니다. 이 파일은 존재하지 않습니다!\r",szDllPath). return FALSE; } LRESULT (CALLBACK* lpDllEntryPoint)(); HINSTANCE hLib = LoadLibrary(szDllPath); if (hLib < (HINSTANCE)HINSTANCE_ERROR) return FALSE; (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllUnregisterServer"); BOOL bRet = FALSE; if (lpDllEntryPoint != NULL) { HRESULT hr = (*lpDllEntryPoint)(); bRet = SUCCEEDED(hr); if (FAILED(hr)) { CString szErrMsg; if (GetErrMessage(hr, szErrMsg)) { lprintf(L "%s 파일을 반등록할 때 오류 발생:%s\r",szDllPath,szErrMsg); } else { lprintf(L "%s 파일을 반등록할 때 오류가 발생했지만 오류 정보를 얻을 수 없습니다. 오류 코드는 x%08x\r",szDllPath,hr)입니다. } } } FreeLibrary(hLib); return bRet; } 출처 -

좋은 웹페이지 즐겨찾기