C++ DLL注册

今天项目中需要用C++实现对几个DLL文件的注册,查了许多资料,总结如下:

 1 #include <SHLWAPI.H>
 2 #pragma region DLL 注册与反注册 add by whl
 3 #pragma comment(lib, "Shlwapi.lib")
 4 bool RegistryDll(CString& szDllPath)   
 5 {   
 6     if (!(PathFileExists(szDllPath) && (!PathIsDirectory(szDllPath))))   
 7     {   
 8         return FALSE;   
 9     }   
10     LRESULT (CALLBACK* lpDllEntryPoint)();    
11     HINSTANCE hLib = LoadLibrary(szDllPath);   
12     if (hLib < (HINSTANCE)HINSTANCE_ERROR)    
13         return FALSE;    
14     (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");    
15     BOOL bRet = FALSE;   
16     if (lpDllEntryPoint != NULL)   
17     {   
18         HRESULT hr = (*lpDllEntryPoint)();   
19         bRet = SUCCEEDED(hr);   
20 
21     }   
22     FreeLibrary(hLib);   
23     return bRet;   
24 }   
25 
26 //UnRegistryDll用来反注册DLL,参数是DLL的全路径,返回值代表注册成功或者失败(TRUE为成功)。 
27 bool UnRegistryDll(CString& szDllPath)   
28 {   
29     if (!(PathFileExists(szDllPath) && (!PathIsDirectory(szDllPath))))   
30     {   
31         return FALSE;   
32     }   
33     LRESULT (CALLBACK* lpDllEntryPoint)();    
34     HINSTANCE hLib = LoadLibrary(szDllPath);   
35     if (hLib < (HINSTANCE)HINSTANCE_ERROR)    
36         return FALSE;    
37     (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllUnregisterServer");    
38     BOOL bRet = FALSE;   
39     if (lpDllEntryPoint != NULL)   
40     {   
41         HRESULT hr = (*lpDllEntryPoint)();   
42         bRet = SUCCEEDED(hr);   
43 
44     }   
45     FreeLibrary(hLib);   
46     return bRet;   
47 }   
48 #pragma endregion
49 
50 #pragma region DLL 注册
51     WCHAR exeFullPath[MAX_PATH]; // Full path
52     GetModuleFileName(NULL,exeFullPath,MAX_PATH);
53 
54     USES_CONVERSION;
55     CString str2;
56     str2.Format(L"%s",exeFullPath);
57     std::string str1 = W2A(str2.GetBuffer());
58     str2.ReleaseBuffer();
59     int pos = str1.find_last_of('\\',str1.length()-1);
60     std::string LibPath = str1.substr(0, pos);
61     std::string CPIHelperdllPath = LibPath + "\\Plugins\\1.dll";
62     std::string FFSClientdllPath = LibPath + "\\2.dll";
63     std::string FWPluginHelperdllPath = LibPath + "\\3.dll";
64 
65     CString CCPIHelperdllPath(CPIHelperdllPath.c_str());
66     CString CFFSClientdllPath(FFSClientdllPath.c_str());
67     CString CFWPluginHelperdllPath(FWPluginHelperdllPath.c_str());
68 
69     BOOL tag1 = RegistryDll(CCPIHelperdllPath);
70     BOOL tag2 = RegistryDll(CFFSClientdllPath);
71     BOOL tag3 = RegistryDll(CFWPluginHelperdllPath);
72 
73     if (tag1 && tag2 && tag3)
74     {
75         ico_RegisterDLL.SetIcon(hIconOk);
76     }
77     else
78     {
79         ico_RegisterDLL.SetIcon(hIconNo);
80     }
81 #pragma endregion

实现过程中遇到的问题:

1、CString与string的转换

 

参考资料

http://bbs.csdn.net/topics/340143744

转载于:https://www.cnblogs.com/whl2012/p/4242560.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值