审查我的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 –