Как сделать экземпляры и вызовы расширенных компонентов COM?Как использовать версированный COM-интерфейс с C#?
Я использовал сторонний компонент COM (XRawFile2.dll от Finnigan/Thermo Scientific) в течение многих лет в связанном приложении mass spectrometry, написанном на .NET (смешанный VB.NET и C#) для доступа к необработанным данным спектра. Это сработало хорошо. Однако этот COM-компонент был расширен с помощью наследования интерфейса. Выраженный в IDL (извлекала с помощью OLE/COM Object Viewer [OLEView.exe]):
interface IXRawfile3 : IXRawfile2 {
.
.
interface IXRawfile2 : IXRawfile {
.
.
interface IXRawfile : IDispatch {
.
.
coclass XRawfile {
[default] interface IXRawfile;
};
The полного извлеченного 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. Файл interop для XRawFile2.dll был создан Visual Studio 2008 обычным способом.
Это действительно сработало. Благодаря! Вернувшиеся точки данных также ожидались. –