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\n", 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\n", szDllPath, szErrMsg);
}
else
{
wprintf(L"注册%s 文件的时候,发生错误,但是无法获取错误信息,错误代码为:x%08x\r\n", szDllPath, hr);
}
}
}
FreeLibrary(hLib);
return bRet;
}
2.反注册dll
//UnRegistryDll用来反注册DLL,参数是DLL的全路径,返回值代表注册成功或者失败(TRUE为成功)。
BOOL UnRegistryDll(CString& szDllPath)
{
if (!(PathFileExists(szDllPath) && (!PathIsDirectory(szDllPath))))
{
wprintf(L"反注册%s 文件的时候,发生错误:该文件不存在!\r\n", 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))
{
wprintf(L"反注册%s 文件的时候,发生错误:%s\r\n", szDllPath, szErrMsg);
}
else
{
wprintf(L"反注册%s 文件的时候,发生错误,但是无法获取错误信息,错误代码为:x%08x\r\n", szDllPath, hr);
}
}
}
FreeLibrary(hLib);
return bRet;
}
摘自--
//UnRegistryDll用来反注册DLL,参数是DLL的全路径,返回值代表注册成功或者失败(TRUE为成功)。
BOOL UnRegistryDll(CString& szDllPath)
{
if (!(PathFileExists(szDllPath) && (!PathIsDirectory(szDllPath))))
{
wprintf(L"反注册%s 文件的时候,发生错误:该文件不存在!\r\n", 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))
{
wprintf(L"反注册%s 文件的时候,发生错误:%s\r\n", szDllPath, szErrMsg);
}
else
{
wprintf(L"反注册%s 文件的时候,发生错误,但是无法获取错误信息,错误代码为:x%08x\r\n", szDllPath, hr);
}
}
}
FreeLibrary(hLib);
return bRet;
}