Comment créer des instances et des appels aux composants COM qui ont été étendus?Comment utiliser une interface COM versionnée de C#?
J'ai utilisé un composant COM tiers (XRawFile2.dll de Finnigan/Thermo Scientific) pendant de nombreuses années dans une application connexe mass spectrometry écrite en .NET (VB.NET et C# mixtes) pour accéder aux données de spectre brutes. Cela a bien fonctionné. Cependant, ce composant COM a été étendu au moyen de l'héritage d'interface. Exprimé en IDL (en utilisant la OLE/COM Object Viewer extraite en [Oleview.exe]):
interface IXRawfile3 : IXRawfile2 {
.
.
interface IXRawfile2 : IXRawfile {
.
.
interface IXRawfile : IDispatch {
.
.
coclass XRawfile {
[default] interface IXRawfile;
};
La pleine extrait IDL for XRawFile2.dll est disponible (page HTML avec < pré >).
Je veux utiliser une fonction disponible dans la nouvelle interface (IXRawfile3),
GetMassListRangeFromScanNum()
au lieu de
GetMassListFromScanNum()
dans l'interface d'origine (IXRawfile).
Je n'ai aucun problème à créer une instance de XRawFile et à appeler GetMassListFromScanNum(). Mais je n'arrive pas à le faire fonctionner avec GetMassListRangeFromScanNum(). Par exemple en utilisant GetMassListRangeFromScanNum() pour une instance de XRawFile donne cette compilation erreur:
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?)
Le tryout C# source code est également disponible.
Plate-forme: Windows XP 64 bits SP2. Visual Studio 2008. Le fichier interop pour XRawFile2.dll a été créé par Visual Studio 2008 de la manière normale.
Cela a réellement fonctionné. Merci! Les points de données retournés étaient également comme prévu. –