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);
È stato utile?

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 sostituire single 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top