Nessuna definizione di tipo nel FILE IDL predefinito
Domanda
In primo luogo,
Utilizzo di plain C ++, senza ATL, MFC che tenta di utilizzare l'interfaccia COM Object.
Uso di oleview (Visualizzatore oggetti OLE / COM) - utilizzato per progettare il codice IDL.
In questa fase, utilizzando il compilatore MIDL , ora ho problemi a provare a produrre quanto segue:
Sintassi sulla linea cmd:
midl / nologo / env win32 / tlb ". \ S8_.tlb " / h ". \ S8_.h " / iid ". \ S8_i.c " S8.idl
- Un corrispondente .TLB (libreria dei tipi)
- A .H (intestazione)
- Un file di definizioni IID include (* _i.c)
- Un proxy (* _p.c)
Errore del compilatore MIDL:
S8.IDL (513): errore MIDL2025: errore di sintassi: attesa di una specifica del tipo vicino a "S8SimObject"
HRESULT LinkSimObjects(
[in] S8SimObject* SourceObject, ####line 513 ####
[in] S8SimObject* DestObject,
[in] float TravelTime);
Soluzione 2
Errore del compilatore MIDL
S8.IDL (513): errore MIDL2025 : errore di sintassi: attesa di una specifica del tipo vicino a "S8SimObject"
RISOLTO
Aggiungi una dichiarazione a termine - all'inizio del file IDL:
- import " ocidl.idl " ;;
- interfaccia S8SimObject;
Altri suggerimenti
Bene, non capisco davvero la tua domanda qui, ma quanto segue dovrebbe aiutare:
- Le definizioni di enum pubblico devono avere il proprio uuid per essere veramente pubbliche.
- Ho visto che quelle definizioni enum non vanno nella libreria dei tipi a meno che non siano effettivamente utilizzate in qualche metodo di interfaccia. Non ne conosco il motivo, probabilmente mi sono perso qualcosa di semplice (come aggiungere quell'enum a un blocco di libreria o altro).
-
short
generalmente indica un numero intero breve, non un numero a virgola mobile a precisione singola. - L'equivalente di
float
èsingle
in VB, ma come ho visto in altre tue domande, sospetto che tu abbia effettivamente inteso sostituiresingle con
float
.
A proposito, consiglierei di pubblicare un file IDL minimo (compilabile) (rimosso dalla maggior parte delle definizioni), che assomigli più o meno a ciò che stai cercando di compilare. Questo aiuta a evitare un po 'di confusione, poiché ad esempio stai usando IS8Simulation
nel tuo testo, ma S8SimObject
nello snippet IDL copiato. E sarebbe anche utile se specifichi il risultato atteso e l'errore imprevisto (per te).
Modifica
Bene, questo errore di compilazione che hai inserito ora è semplice: S8SimObject
non è definito. Devi sempre fare riferimento all'interfaccia nelle dichiarazioni del metodo ( IS8Simulation
), mai alla coclasse che implementa l'interfaccia.
Come hai detto, stai modificando un file IDL esistente qui: Qual è l'obiettivo di base? Se il file IDL originale utilizza sempre S8SimObject
, forse l'unico problema è che la definizione di S8SimObject
non è inclusa nella parte superiore del file IDL? Se hai la libreria dei tipi che definisce S8SimObject
, puoi esportare l'IDL di questa interfaccia usando OleView.