Question

Tout d'abord,

Utilisation de plain C ++, sans ATL, MFC essayant d'utiliser l'interface d'objet COM.

Utilisation de oleview (afficheur d'objets OLE / COM) - utilisé pour générer le code IDL.

À ce stade, avec MIDL Compiler, je ne parviens pas à produire les éléments suivants:

Syntaxe sur la ligne de commande:

midl / nologo / env win32 / tlb ". \ S8_.tlb" / h ". \ S8_.h " / iid ". \ S8_i.c " S8.idl

  • un fichier .TLB (bibliothèque de types) correspondant
  • A .H (en-tête)
  • Un fichier d'inclusion de définitions IID (* _i.c)
  • Un proxy (* _p.c)

Erreur de compilation MIDL:

S8.IDL (513): erreur MIDL2025: erreur de syntaxe: attente d'une spécification de type près de "S8SimObject"

.
    HRESULT LinkSimObjects(
                    [in] S8SimObject* SourceObject, ####line 513 ####
                    [in] S8SimObject* DestObject,
                    [in] float TravelTime);
Était-ce utile?

La solution 2

Erreur du compilateur MIDL

S8.IDL (513): erreur MIDL2025 : erreur de syntaxe: attente d'une spécification de type près de "S8SimObject"

.

RESOLU

Ajoutez une déclaration d'envoi - en haut du fichier IDL:

  • importer "ocidl.idl";
  • interface S8SimObject;

Autres conseils

Eh bien, je ne comprends pas vraiment votre question ici, mais la suite devrait vous aider:

  • Les définitions d’énumération publiques doivent avoir leur propre uuid pour être réellement publiques.
  • J'ai vu que ces définitions d'énumération ne vont pas dans la bibliothèque de types sauf si elles sont réellement utilisées dans une méthode d'interface. Je ne connais pas la raison, probablement quelque chose de simple m'a échappé (par exemple, l'ajout de cette énumération à un bloc de bibliothèque, etc.).
  • short désigne généralement un entier court et non un nombre à virgule flottante simple précision.
  • L'équivalent de float est single en VB, mais comme je l'ai déjà vu sur d'autres questions, je suppose que vous vouliez réellement remplacer single avec float .

Au fait, je vous conseillerais de poster un fichier IDL minimal (compilable) (dépourvu de la plupart des définitions), qui ressemble plus ou moins à ce que vous essayez de compiler. Cela évite une certaine confusion, par exemple si vous utilisez IS8Simulation dans votre texte, mais S8SimObject dans l'extrait de code IDL copié. Et cela aiderait également si vous spécifiez le résultat attendu et l'erreur inattendue (pour vous).

Modifier

Eh bien, cette erreur de compilation que vous venez d'insérer est simple: S8SimObject n'est pas défini. Vous devez toujours faire référence à l'interface dans les déclarations de méthode ( IS8Simulation ), jamais à la coclasse qui implémente l'interface.

Comme vous l'avez dit, vous modifiez ici un fichier IDL existant: Quel est l'objectif de base? Si le fichier IDL d'origine utilise toujours S8SimObject , le seul problème est-il que la définition de S8SimObject n'est pas incluse en haut du fichier IDL? Si la bibliothèque de types définit S8SimObject , vous pouvez exporter l'IDL de cette interface à l'aide de OleView.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top