Keine Typdefinitionen in vordefinierten IDL-Datei
Frage
Zum einen
Mit Ebene C ++, ohne ATL, MFC versucht COM-Objekt-Schnittstelle zu verwenden.
Mit OLEVIEW (OLE / COM-Objekt-Viewer.) - verwendet, um den IDL-Code zu konstruieren
In dieser Phase mit MIDL Compiler, jetzt ich habe Probleme beim Versuch, den folgenden zu erzeugen:
Syntax auf cmd Zeile:
midl / nologo / env win32 / TLB "\ S8_.tlb" / h "\ S8_.h" / iid "\ S8_i.c" S8.idl
- Eine entsprechende TLB (Type Library)
- A · H (Header)
- Ein IID Definitionen Include-Datei (* _i.c)
- Ein Proxy (* _p.c)
MIDL-Compiler-Fehler:
S8.IDL (513): Fehler MIDL2025: Syntaxfehler: eine Typangabe in der Nähe von "S8SimObject" erwartet
HRESULT LinkSimObjects(
[in] S8SimObject* SourceObject, ####line 513 ####
[in] S8SimObject* DestObject,
[in] float TravelTime);
Lösung 2
MIDL-Compiler-Fehler
S8.IDL (513): Fehler MIDL2025 : Syntaxfehler: eine Typangabe in der Nähe von "S8SimObject"
GELÖST
Fügen Sie ein Vorwärts-Deklaration - an der Spitze der IDL-Datei:
- Import "Ocidl.idl";
- Schnittstelle S8SimObject;
Andere Tipps
Nun, ich verstehe nicht wirklich Ihre Frage hier, aber folgende helfen:
- Public Enum-Definitionen müssen ihre eigenen haben Uuid wirklich öffentlich sein.
- Ich habe gesehen, dass diese Enum-Definitionen gehen nicht in die Art-Bibliothek, wenn sie tatsächlich in einem gewissen Interface-Methode verwendet werden. Ich weiß nicht den Grund dafür, wahrscheinlich habe ich etwas verpaßt einfach (wie die ENUM zu einem Bibliotheksblock hinzufügen oder was auch immer).
-
short
bedeutet in der Regel eine kurze ganze Zahl ist, keine einfache Genauigkeit Gleitkommazahl. - Das Äquivalent von
float
istsingle
in VB, aber wie ich auf andere Fragen Sie gesehen haben, ich vermute, dass Sie tatsächlichsingle
mitfloat
gemeint zu ersetzen.
By the way, würde ich empfehlen, eine minimal (übersetzbar) IDL-Datei zu schreiben (gestrippt von den meisten Definitionen), die mehr oder weniger ähnelt, was Sie versuchen zu kompilieren. Dies hilft gegen einige Verwirrung, wie Sie zum Beispiel mit IS8Simulation
im Text sind, aber S8SimObject
in Ihrem kopiert IDL-Schnipsel. Und es würde auch helfen, wenn Sie das erwartete Ergebnis angeben, und das Unerwartete (für Sie) Fehler.
Bearbeiten
Nun, der Compiler-Fehler Sie jetzt eingefügt ist einfach: S8SimObject
ist nicht definiert. Sie müssen sich immer an die Schnittstelle in den Verfahren Erklärungen beziehen (IS8Simulation
), nie auf die Co-Klasse, die die Schnittstelle implementiert.
Wie Sie gesagt haben Sie eine vorhandene IDL-Datei hier sind zu ändern: Was ist das grundlegende Ziel? Wenn das Original immer IDL-Datei S8SimObject
verwendet, vielleicht das einzige Problem ist, dass die Definition von S8SimObject
nicht an der Spitze der IDL-Datei enthalten ist? Wenn Sie den Typ-Bibliothek definiert S8SimObject
um haben, können Sie die IDL dieser Schnittstelle Export von OleView verwenden.