審查我的COM實現的方法,我發現這個Bug。我正在使用一個靜態類來初始化COM實例,並且初始化事件發生在靜態構造函數中。因此,每個應用程序會話都要進行一次初始化。在這種情況下,當com實例被破壞或被丟棄時,然後調用COM方法會引發異常(RPC服務器不可用)。 所以,我用下面的方法來克服這個問題
try
{
m_COMObject.SomeMethod();
}
Exception(exception exception)
{
DisposeCOMObject();
InitializeCOMOBject();
COMObject.Somethod();
}
public void DisposeCOMObject()
{
m_COMObject = null;
var process = Process.GetProcessesByNames("COM .exe").FirstDefault();
if(process != null)
{
process.kill();
}
}
public void InitializeCOMObject()
{
m_COMObject = null;
m_COMObject = new COMObject();
}
如果COM的情況下是無法做出然後調用Dispose的實例,並重新初始化COM和獲得實例,然後進行調用RPC服務器。
所以這是一個用VB編寫的COM Out-Of-Process服務器(.EXE)......什麼? VB.NET? VB6? –
它是不同的.exe,這是VB6 –