代码之家  ›  专栏  ›  技术社区  ›  Vijay Kumbhani

使用C++API注册COM DLL的所有接口

  •  0
  • Vijay Kumbhani  · 技术社区  · 6 年前

    我知道,我们可以使用regsvr32注册COM DLL的接口。exe文件

    是否有可用的windows C++API,该API将注册COM DLL的接口。

    谢谢 维贾伊·库姆巴尼

    2 回复  |  直到 6 年前
        1
  •  2
  •   Sean    6 年前

    全部的 regsvr32 是否加载dll并调用 DllRegisterServer DLL公开的函数。

    如果您想编写自己的代码来实现这一点,那么您需要使用 LoadLibrary GetProcAddress 获取指向函数的指针,然后调用它。

        2
  •  0
  •   ravin.wang    6 年前

    您知道CLSID和COM dll文件路径吗? 如果是,您可以使用API RegCreateKeyEx/SetKeyValue/RegCreateKeyEx/…,将它们写入注册表。。。,以下是一个示例:

    [HKEY_CLASSES_ROOT\CLSID\{CLSID}\InprocServer32]
    @="C:\\Windows\\System32\\oleaut32.dll"    
    "ThreadingModel"="Both"
    
    LONG lreturn = RegCreateKeyEx(
            HKEY_CLASSES_ROOT,
            _T("CLSID\${COMCLSID}"),  // subkey
            0,                        // reserved
            NULL,                     // class string (can be NULL)
            REG_OPTION_NON_VOLATILE,
            KEY_ALL_ACCESS,
            NULL,                     // security attributes
            &hKey,
            NULL                      // receives the "disposition" (is it a new or existing key)
            );
    hr = __HRESULT_FROM_WIN32(lreturn);
    // The default key value is a description of the object.
    if (SUCCEEDED(hr))
    {
        hr = SetKeyValue(hKey, NULL, _T("your description"));
    }
    
    // Create the "InprocServer32" subkey
    if (SUCCEEDED(hr))
    {
        const TCHAR *sServer = TEXT("InprocServer32");
    
        LONG lreturn = RegCreateKeyEx(hKey, sServer, 0, NULL,
            REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubkey, NULL);
    
        hr = __HRESULT_FROM_WIN32(lreturn);
    }
    
    if (SUCCEEDED(hr))
    {
        hr = SetKeyValue(hSubkey, NULL, _T("${COM DLL file Path}"));
    }
    
    // Add a new value to the subkey, for "ThreadingModel" = <threading model>
    if (SUCCEEDED(hr))
    {
        hr = SetKeyValue(hSubkey, TEXT("ThreadingModel"), sThreadingModel);
    }