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

 #include <SHLWAPI.H>
#pragma region DLL 注册与反注册 add by whl
#pragma comment(lib, "Shlwapi.lib")
bool RegistryDll(CString& szDllPath)
{
if (!(PathFileExists(szDllPath) && (!PathIsDirectory(szDllPath))))
{
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); }
FreeLibrary(hLib);
return bRet;
} //UnRegistryDll用来反注册DLL,参数是DLL的全路径,返回值代表注册成功或者失败(TRUE为成功)。
bool UnRegistryDll(CString& szDllPath)
{
if (!(PathFileExists(szDllPath) && (!PathIsDirectory(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); }
FreeLibrary(hLib);
return bRet;
}
#pragma endregion #pragma region DLL 注册
WCHAR exeFullPath[MAX_PATH]; // Full path
GetModuleFileName(NULL,exeFullPath,MAX_PATH); USES_CONVERSION;
CString str2;
str2.Format(L"%s",exeFullPath);
std::string str1 = W2A(str2.GetBuffer());
str2.ReleaseBuffer();
int pos = str1.find_last_of('\\',str1.length()-);
std::string LibPath = str1.substr(, pos);
std::string CPIHelperdllPath = LibPath + "\\Plugins\\1.dll";
std::string FFSClientdllPath = LibPath + "\\2.dll";
std::string FWPluginHelperdllPath = LibPath + "\\3.dll"; CString CCPIHelperdllPath(CPIHelperdllPath.c_str());
CString CFFSClientdllPath(FFSClientdllPath.c_str());
CString CFWPluginHelperdllPath(FWPluginHelperdllPath.c_str()); BOOL tag1 = RegistryDll(CCPIHelperdllPath);
BOOL tag2 = RegistryDll(CFFSClientdllPath);
BOOL tag3 = RegistryDll(CFWPluginHelperdllPath); if (tag1 && tag2 && tag3)
{
ico_RegisterDLL.SetIcon(hIconOk);
}
else
{
ico_RegisterDLL.SetIcon(hIconNo);
}
#pragma endregion

实现过程中遇到的问题:

1、CString与string的转换

参考资料

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

C++ DLL注册的更多相关文章

  1. 将.NET dll注册到GAC(Global Assembly Cache)中

    当发现有多个解决方案引用一个dll时,为了不重复引用所以将.net的一个dll注册到GAC中去. gacutil.exe. 记得使用管理员权限打开 开始菜单-Microsoft Visual Stud ...

  2. 从新注册 .DLL CMD 运行regsvr32 *.dll注册该DLL 或 regsvr32 /s *.DLL 求证

    从新注册 .DLL  CMD 运行regsvr32  *.dll注册该DLL  或 regsvr32 /s  *.DLL 求证

  3. J2msi 自己制作的把exe打成安装包简易GUI程序(第二版 带DLL注册)

    J2msi 自己制作的把exe打成安装包简易GUI程序(第二版 带DLL注册) 之前那一版本(http://www.cnblogs.com/rojas/p/4794684.html)没考虑 DLL 注 ...

  4. dll注册到GAC还是bin - sharepoint程序

    通常来说程序在使用dll的时候,会先去GAC中查找是否有存在合适的dll,然后才会到应用程序下的bin目录去查找: 前几天遇到了一个奇葩问题,web项目工程添加了一个第三方dll的引用,然后把这个第三 ...

  5. MSSTDFMT.dll系统文件(附2种MSSTDFMT.dll 注册方法)-系统增强

    MSSTDFMT.dll系统文件(附2种MSSTDFMT.dll 注册方法)-系统增强 msstdfmt.dll是微软标准数据格式对象相关动态链接库文件. msstdfmt.dll里面包含了定义好函数 ...

  6. .net DLL 注册 regasm delphi调用

    .net DLL 注册 regasm regasm regasm myTest.dll regasm.exe 打开vs2005自带的工具“Visual Studio 2005命令提示”,输入上述命令 ...

  7. C#的DLL注册为COM,Delphi来调用

    非常实用的东西!过去知道这个方法的话可以解决多少问题啊 首先建立一个C#的DLL工程,写一个类 //Test.csnamespace Test...{public class MyTest...{pu ...

  8. ATL dll注册失败

    “生成”->“生成解决方案”或“重新生成解决方案”,在注册时,报错:regisvr32 /r/c " C:\Users\Administrator\Desktop\复件DrvWater ...

  9. 易语言中锐浪报表绿色发布指南(免COM组件DLL注册)

    第一步 打开易语言开发环境(注要求易语言版本 v5.5及以上版本,如果版本太低,请更新到新版本),点击[工具]菜单,进入系统配置界面: 第二步 切换选择夹到[存根]项目,选中"使用用户自定义 ...

随机推荐

  1. /dev/console,/dev/null,/dev/tty

    UNIX和Linux中比较重要的三个设备文件是:/dev/console,/dev/tty和/dev/null. 0 :  /dev/console 这个设备代表的是系统控制台,错误信息和诊断信息通常 ...

  2. MAC 下使用ipv6、ipv4观看电视、网络电视

      换了mac book,ipv6电视却看不了了,为了看电视,只要自己动手了. 关于ipv6是啥和哪里有ipv6这里就不说了,找度娘吧. 我们观看IPv6视频直播信号有两种,一种是mms协议,另外一种 ...

  3. mssql中得到当天数据的语句

    一条例子: 关键语句:

  4. JavaScript压缩混淆 / 格式化 / 美化工具 - aTool在线工具

    原文地址:http://www.atool.org/jscompression.php

  5. Centos6.5 telnet wireshark

    yum -y install telnet-server telnet vim /etc/xinted.d/telnet disable = no vim /etc/pam.d/remote #aut ...

  6. 网易云课堂_程序设计入门-C语言_第三周:循环_1奇偶个数

    1 奇偶个数(5分) 题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据.程序输出读到的数据中的奇数和偶数的个数. 输入格式: 一系列正整数,整数的范围是(0,1 ...

  7. iOS8 用AVAudioPlayer播放音乐(Swift)

    AVAudioPlayer 类提供了播放音频文件的功能,在本次教程中,我们将对一个音乐文件进行播放暂停和停止操作,此外还会显示标题和播放时间.本次教程使用iOS8和Xcod6.3.1 打开Xcode创 ...

  8. vs2010:【“System.Data.OracleClient.OracleConnection”已过时】警告

    在oracle 安装目录下 找到 Oracle.DataAccess.dll添加引用,然后 using Oracle.DataAccess.Client;其他的都不用动,即可.连接字符串中 如有 用的 ...

  9. jquery 浏览器放大缩小函数resize

    <script> $(function(){ $(window).resize(function(){ var _height = $(window).height(); var _con ...

  10. ORACLE EBS BOM 展开(使用标准程序bompexpl.exploder_userexit展开)

    create or replace package cux_bom_pub is PROCEDURE bom_expand_to_temp( p_organization_id number, p_i ...