zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Razor 常用又容易忘记语法
    游览器 reflow
    正则表达式
    migration to end point routing
    js 翻译 c# 注意事项
    Angular 学习笔记 work with excel (导出 excel)
    html4,5 basic
    IIS 服务器配置
    meta 的用途
    正则表达 常用
  • 原文地址:https://www.cnblogs.com/whl2012/p/4242560.html
Copyright © 2011-2022 走看看