.NET COM库未从C ++主机进程卸载

时间:2009-12-04 12:31:57

标签: .net c++ com

我们这里有一个插件系统,用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 个答案:

答案 0 :(得分:1)

由于我在this post

中描述的原因,我不支持.NET插件

答案 1 :(得分:0)

通过此thread

解决