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