У нас есть система плагинов, написанная на 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;
}