2009-10-15 25 views
1

如何創建實例並調用已擴展的COM組件?如何從C#使用版本化的COM接口?

我已經使用.NET(混合VB.NET和C#)編寫的mass spectrometry相關應用程序中使用第三方COM組件(來自Finnigan/Thermo Scientific的XRawFile2.dll)多年,用於訪問原始光譜數據。這工作得很好。然而,這個COM組件已經通過接口繼承的方式進行了擴展。在IDL表示(提取使用OLE/COM Object Viewer [OLEView.exe這類]):

interface IXRawfile3 : IXRawfile2 { 
. 
. 

interface IXRawfile2 : IXRawfile { 
. 
. 

interface IXRawfile : IDispatch { 
. 
. 

coclass XRawfile { 
    [default] interface IXRawfile; 
}; 

完整提取IDL for XRawFile2.dll是可用的(HTML頁面<預>)。

我想使用新界面(IXRawfile3)能夠使用的功能,

GetMassListRangeFromScanNum() 

,而不是

GetMassListFromScanNum() 
在原來的接口(IXRawfile)

我沒有麻煩創建XRawFile的實例並調用GetMassListFromScanNum()。 但我無法讓它與GetMassListRangeFromScanNum()一起使用。例如使用GetMassListRangeFromScanNum()用於XRawFile的實例給出了這樣的編譯錯誤:

Error 1 'XRAWFILE2Lib.XRawfile' does not contain a 
    definition for 'GetMassListRangeFromScanNum' and no 
    extension method 'GetMassListRangeFromScanNum' accepting a 
    first argument of type 'XRAWFILE2Lib.XRawfile' could be 
    found (are you missing a using directive or an assembly 
    reference?) 

tryout C# source code也是可用的。

平臺:Windows XP 64位SP2。 Visual Studio 2008. XRawFile2.dll的互操作文件是由Visual Studio 2008以正常方式創建的。

回答

1

試試您鑄造XRawFile的實例IXRawfile3

例如

((IXRawfile3) myRawFile).GetMassListRangeFromScanNum() 

這應該對COM對象做一個查詢接口,要求它爲IXRawfile3接口。 (假設你已經導入的類型庫不匹配XRawfile的實現)

+0

這實際上工作。謝謝!返回的數據點也如預期。 – 2009-10-15 13:04:11

0

我會建議使用下面的語句(版本2.2):

MSFileReader_XRawfile rawfile = new MSFileReader_XRawfile(); 

這可以簡單地給你一個激烈。

您可以稍後調用任何方法。