Библиотека COM .NET не выгружается из хост-процесса C ++ - PullRequest
2 голосов
/ 04 декабря 2009

У нас есть система плагинов, написанная на c ++. Теперь, когда у этого есть возможность обновить плагины (которые являются COM), нам нужно выгрузить плагин, установить плагин и затем загрузить его снова. Теперь проблема в том, что это должно происходить без закрытия приложения. C ++ COM DLL выгружаются довольно хорошо, но .NET нет. Вот пример кода, который я использую для загрузки / выгрузки COM.

#include "stdafx.h"
#import "C:\Projects\MyTLBWithInterface.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids


int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(0);

    try
    {
        CLSID rclsid;


        HRESULT  hr = CLSIDFromProgID(_T("MY_NET_COM"), &rclsid);

        if (hr != S_OK)
        {
            return false;
        }

        IMYInterfaceForCom *cpi =NULL;

        hr = CoCreateInstance(rclsid, 0, CLSCTX_ALL, __uuidof(IUnknown),reinterpret_cast<void**>(&cpi));

        if (SUCCEEDED(hr)) 
        {

            BSTR  name;
            cpi->GetName(&pluginName);
                MessageBox(0,pluginName, L"MyApp", MB_OK|MB_ICONERROR);

            ULONG CC = cpi->Release();

            CoFreeUnusedLibraries();
        }

    }
    catch(_com_error & e)
    {
        _bstr_t bstrSource(e.Source());
        _bstr_t bstrDescription(e.Description());
        printf("\nException:\n\tSource : %s \n\tDescription : %s \n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
    }
    catch(...)
    {
        printf("\nException");
    }

    CoUninitialize();
    return 0;

}

Ответы [ 2 ]

1 голос
/ 04 декабря 2009

Я бы не поддерживал плагины .NET по причинам, которые я описал в этом посте

0 голосов
/ 08 декабря 2009

Решено с помощью этой темы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...