2013-05-16 51 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服務器。