zoukankan      html  css  js  c++  java
  • 设置注册表数据和类型

    设置注册表数据和类型

    LONG RegSetValueEx(

        HKEY hKey, 键

        LPCTSTR lpValueName, 子健

        DWORD Reserved, 保留值,必须强制为0

        DWORD dwType, 数据类型

        CONST BYTE *lpData, 数据

        DWORD cbData 数据大小

    );

    删除一个注册表键

    LONG WINAPI RegDeleteKey(

    __in HKEY hKey,      注册表打开的键值的句柄。删除的键值必须是拥有访问权限的。

    __in LPCTSTR lpSubKey 被删除的键值名称

    );

    该函数主要为了获取要删除键值句柄

    LONG RegOpenKey(

     HKEY hKey,  // 要打开键的句柄

    LPCTSTR lpSubKey,  // 要打开子键的名字的地址

    PHKEY phkResult ); // 要打开键的句柄的地址  传出参数 HKEY hKey,

    LONG RegDeleteValue(

    HKEY hKey,  // 要打开键的句柄

    LPCWSTR lpValueName );  //删除一个键值。

    注册表遍历

    RegEnumKeyEx  ------》  Example Code  

     For an example, see   Using the Registry.

    照搬即可

      //写注册表

      for (int i = 0; i < sizeof(g_Regs) / sizeof(g_Regs[0]); i++)
    
      {
    
        const char* SubKey    = g_Regs[i][0];
    
        const char* ValueName = g_Regs[i][1];
    
        const char* Value     = g_Regs[i][2];
    
        if (Value == NULL)
    
          Value = Path;
    
        HKEY hKey;
    
        //RegCreateKey(HKEY_CLASSES_ROOT, SubKey, &hKey);
    
        LONG lRet = RegSetKeyValue(HKEY_CLASSES_ROOT, SubKey, ValueName, REG_SZ, Value, strlen(Value));
    
    if (lRet != ERROR_SUCCESS)

    因为不可能dll路径固定,所以需要在注册表中添加dll路径

    使每次可以系统的查询dll路径位置。

    注册表中,dll路径加载位置

    计算机HKEY_CLASSES_ROOTWOW6432NodeCLSID

    通过 regsvr32.exe 来加载dll  使dll路径添加到注册表中

    一般dll里面的导出函数

    STDAPI DllGetClassObject

    STDAPI DllRegisterServer()

    STDAPI DllUnregisterServer()

    STDAPI DllCanUnloadNow()

    类产生对象都和其他工厂,没有关系

    template<typename class_name, typename class_base>
    
    class CMyFactory :public ImpIUnknown<class_name, class_base>
    
    {
    
    public:
    
      CMyFactory()
    
        :ImpIUnknown(IID_IMyClassFactory)
    
      {
    
      }
    
     
    
      virtual HRESULT __stdcall  CreateObject(const GUID & iid, void**ppObject)
    
      {
    
        static class_name *pObject = NULL;
    
        if (pObject == NULL)
    
          pObject = new class_name;
    
        HRESULT hr = pObject->QueryInterface(iid, ppObject);
    
        if (FAILED(hr) && class_name::m_RefCount == 0)
    
        {
    
          delete pObject;
    
          pObject = NULL;
    
        }
    
        return hr;
    
      }
    
      static HRESULT Create(const GUID & clsid, const GUID & iid, void** ppObject)
    
      {
    
        static IMyClassFactory *pObject = NULL;
    
        if (pObject == NULL)
    
        {
    
          pObject = new CMyFactory();
    
        }
    
        HRESULT hr = pObject->QueryInterface(iid, ppObject);
    
        if (FAILED(hr) && m_RefCount == 0)
    
        {
    
          delete pObject;
    
          pObject = NULL;
    
        }
    
        return hr;
    
      }
    
    public:
    
      static int m_RefCount;
    
    };
    
    template<typename class_name, typename class_base>
    
    int CMyFactory<class_name, class_base>::m_RefCount = 0;
    学如逆水行舟,不进则退。 博客园技术交流群 群 号:1073255314 (本群没人,刚刚建立 -_-!!! )
  • 相关阅读:
    composer "Illegal offset type in isset or empty"报错解决方案
    Yii2 使用a标签发送post请求
    YII2 项目安装步骤及异常记录
    三级城市联动菜单
    最新全国省、市、县数据库
    Sanic官翻-SSL示例
    Sanic官翻-WebSocket
    Sanic官翻-部署
    Sanic官翻-概述
    老子的道德经
  • 原文地址:https://www.cnblogs.com/Mj-NaijAm/p/13602454.html
Copyright © 2011-2022 走看看