今天项目中需要用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. Mac OS X 快捷键(完整篇)

    不少朋友提出要求,希望有个「高质量」的列表.其实这样的资源真是太多,平果官网就有 快捷键文档(多国语言版本).于是花了20分钟,浏览了一些网站,整理了点资源放过来供大家参考. 快捷键是通过按下键盘上的 ...

  2. [C#]6.0新特性浅谈

    原文:[C#]6.0新特性浅谈 C#6.0出来也有很长一段时间了,虽然新的特性和语法趋于稳定,但是对于大多数程序猿来说,想在工作中用上C#6.0估计还得等上不短的一段时间.所以现在再来聊一聊新版本带来 ...

  3. python魔术方法

    在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的 ...

  4. Linux下 fcntl 函数用法说明

    功能描述:根据文件描述词来操作文件的特性. 文件控制函数         fcntl -- file control LIBRARY         Standard C Library (libc, ...

  5. js格式化日期yyyyMMdd

    先来一个土方法: <script>function getyyyyMMdd(){ var d = new Date(); var curr_date = d.getDate(); var ...

  6. Quartz 2D官方文档翻译(持续更新中)

    转换  核心绘图模型定义了两个完全独立的坐标空间:用户空间,一个是代表文档页,和设备空间,另外一个代表本机设备的分辨率.用户空间坐标是与设备空间中像素分辨率无关的浮点数字.当你想要打印或者显示你的文档 ...

  7. User cannot be resolved to a type

    出现 User cannot be resolved to a type 不知道具体问题出在哪里但是我经过将全路径输入并保存后错误消失 将User选上,然后点击保存就可以了! 最后我发现错误消失了!

  8. C++虚基类的作用

    虚基类的作用     当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份.例如:class CBase { }:class CDerive1:virtua ...

  9. ucenter 同步登录总结

    部署: discuz默认安装后就安装了uc_server应用 各应用根目录必须有uc_client文件夹. 下载ucenter程序查看范例程序 应用管理中,应用的主 URL必须指向到应用的根目录,应用 ...

  10. JavaWeb核心编程之(三.2)Servlet配置

    Servlet配置 1.配置Serlvet加载时机 2.配置多映射 配置加载时机 新建项目config->创建包com.xiaoan.config->创建类FirstServlet imp ...