如何使用C#的版本化COM接口?

时间:2009-10-15 12:52:32

标签: .net com-interop

如何创建和调用已扩展的COM组件?

我在使用.NET编写的mass spectrometry相关应用程序(混合VB.NET和C#)中使用第三方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可用(带有< pre>的HTML页面)。

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

GetMassListRangeFromScanNum()

而不是

GetMassListFromScanNum()

在原始界面(IXRawfile)中。

创建XRawFile实例并调用GetMassListFromScanNum()时,我没有遇到任何问题。 但我无法使用GetMassListRangeFromScanNum()。例如,对于XRawFile的实例使用GetMassListRangeFromScanNum()会产生此编译错误:

  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以正常方式创建。

2 个答案:

答案 0 :(得分:1)

尝试将您的XRawFile实例转换为IXRawfile3

e.g。

( (IXRawfile3) myRawFile ).GetMassListRangeFromScanNum()

这应该在COM对象上执行查询接口,询问它是否为IXRawfile3接口。 (假设您导入的类型库与XRawfile的实现匹配)

答案 1 :(得分:0)

我建议使用以下语句(对于2.2版):

MSFileReader_XRawfile rawfile = new MSFileReader_XRawfile();

这可能只是给你一个激烈的。

您可以稍后调用任何方法。