2009-07-17 9 views
0

Ich habe eine Reihe von Objekten, die abstrakte Schnittstellen erben, die aus einer idl-Datei generiert wurden. Jedes Objekt, das diese Schnittstellen verwendet, enthält dieselbe Datei interface.h, die alle von C++ generierten abstrakten Klassen enthält, die der idl-Schnittstelle zugeordnet sind.gibt es eine Möglichkeit, Midl generieren jede Schnittstelle in einem separaten .h?

Jedes Mal, wenn ich etwas in interfaces.idl ändere, müssen alle Klassen, die davon abhängen, neu erstellt werden, da sich interfaces.h ändert. Gibt es eine Flagge oder etwas zu sagen, um jede abstrakte Klasse in ihrer eigenen .h zu generieren?

Antwort

1

Die einzige Möglichkeit, die ich mir vorstellen kann, besteht darin, jede Schnittstelle in eine eigene IDL-Datei zu setzen oder sie entsprechend der Änderungsrate in mehrere IDLs aufzuteilen.

Dann (oder ist es #import - ich vergesse) diese Schnittstelle IDLs in die Hauptbibliothek IDL, die die Typbibliothek erzeugen wird, wenn Sie das brauchen.

+0

Das ist möglich, aber nicht sehr einfach zu tun, weil ich int egrate typelib in der Anwendung. Jedem eine separate Bibliothek hinzuzufügen, wäre schmerzhaft. Midl hat alles, was es braucht, um die .h zu teilen, ich habe erwartet, dass jemand mir die magische Flagge des magischen Werkzeugs gibt, um es zu tun. –

+1

Es sollte immer noch nur eine Typbibliothek geben - eine Master-IDL, die jede Schnittstelle IDL enthält und den Bibliotheksblock enthält. Funktioniert das nicht für dich? –

+0

Ich hätte besser nachlesen sollen, genau das habe ich gebraucht. Vielen Dank. –

1

Hier ist ein Beispiel, wie Sie die Idl organisieren, um separate .h-Dateien und eine einzige Typelib zu generieren. Die richtige Anweisung ist der Import.

main.idl

import "oaidl.idl"; 
import "ocidl.idl"; 

import "frag1.idl"; 
import "frag2.idl"; 

[ 
    uuid(1BECE2AF-2792-49b9-B133-BBC89C850D6F), 
    version(1.0), 
    helpstring("Bibliothèque de types") 
] 
library Library 
{ 
    importlib("stdole2.tlb"); 

    interface IFrag1; 
    interface IFrag2; 
} 

frag1.idl

import "oaidl.idl"; 
import "ocidl.idl"; 

[ 
    object, 
    uuid(9AEB517B-48B9-4628-8DD3-4A0BA8D39BEF), 
    dual, 
    nonextensible, 
    helpstring("Interface IFrag1"), 
    pointer_default(unique) 
] 
interface IFrag1 : IDispatch { 
    HRESULT frag1(); 
}; 

frag2.idl

import "oaidl.idl"; 
import "ocidl.idl"; 

[ 
    object, 
    uuid(D60835D4-E1B1-40fb-B583-A75373EF15BE), 
    dual, 
    nonextensible, 
    helpstring("Interface IFrag2"), 
    pointer_default(unique) 
] 
interface IFrag2 : IDispatch { 
    HRESULT frag2(); 
};