2013-05-16 50 views
5

我正在使用COM互操作,我正在实例化COM类对象从互操作dll 因此,有几次对象成功实例化,并进行远程过程调用没有任何问题,但有时它抛出一个像RPC Server这样的异常是不可避免的。 我使用的COM组件是用VB写的,我在c#中使用该组件。COM互操作,RPC服务器不可用在c#

那么,有人可以告诉我问题的可能原因(RPC服务器是不可用的)和解决这个问题。

我现在对这个问题无能为力。

所以,先谢谢了,如果你能帮助我

+0

所以这是一个用VB编写的COM Out-Of-Process服务器(.EXE)......什么? VB.NET? VB6? –

+0

它是不同的.exe,这是VB6 –

回答

6

审查我的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服务器。