Je souhaite ajouter une méthode acceptant IStream*
à mon interface COM. Voici l'extrait de IDL:Ajout d'un espace de nommage bizarre lors de l'importation d'un typelib
import "oaidl.idl";
import "ocidl.idl";
import "objidl.idl";//IStream is declared in this .idl file
[
uuid(uuidhere),
version(1.0)
]
library MyLibrary
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
object,
uuid("interfaceid"),
dual,
nonextensible,
oleautomation,
hidden
]
interface IMyInterface : IUnknown {
HRESULT LoadStream([in] IStream* stream);
HRESULT LoadUnknown([in] IUnknown* unkn);
};
}
Je compiler le fichier .idl
et importer le typelib dans un autre projet.
Lorsque je passe en revue le .tlb
dans le fichier OLEView, je vois que le IStream
est déclaré dans mon typelib mais pas IUnknown
. Cela provoque des problèmes - lorsque j'essaie d'appeler IMyInterface::LoadStream()
dans un autre projet C++ dit qu'il ne peut pas convertir IStream*
en MyLibrary::IStream*
. Dans le même temps, il ne se plaint pas de IUnknown.
Pourquoi MIDL place-t-il la définition IStream dans la typelib et ne la traite pas comme une définition globale?
FYI, ocidl.idl importe oaidl.idl, oaidl.dil importe objidl.idl et objidl.idl importe unknwn.idl. Vous avez juste besoin d'importer ocidl.idl. –