Pregunta

Primero,

Utilizando plain C ++, sin ATL, MFC intenta utilizar la interfaz de objetos COM.

Uso de oleview (visor de objetos OLE / COM): se utiliza para diseñar el código IDL.

En esta etapa, usando el compilador MIDL , ahora tengo problemas para intentar producir lo siguiente:

Sintaxis en línea cmd:

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

  • Un correspondiente .TLB (Biblioteca de tipos)
  • A .H (encabezado)
  • Las definiciones de IID incluyen el archivo (* _i.c)
  • Un proxy (* _p.c)

Error del compilador MIDL:

S8.IDL (513): error MIDL2025: error de sintaxis: esperando una especificación de tipo cerca de " S8SimObject "

    HRESULT LinkSimObjects(
                    [in] S8SimObject* SourceObject, ####line 513 ####
                    [in] S8SimObject* DestObject,
                    [in] float TravelTime);
¿Fue útil?

Solución 2

Error del compilador MIDL

S8.IDL (513): error MIDL2025 : error de sintaxis: esperando una especificación de tipo cerca de "S8SimObject"

RESUELTO

Agregue una declaración directa - en la parte SUPERIOR del archivo IDL:

  • import " ocidl.idl " ;;
  • interfaz S8SimObject;

Otros consejos

Bueno, realmente no entiendo tu pregunta aquí, pero lo siguiente debería ayudar:

    Las
  • definiciones de enumeración pública deben tener su propio uuid para ser realmente públicas.
  • He visto que esas definiciones de enumeración no entran en la biblioteca de tipos a menos que realmente se usen en algún método de interfaz. No sé la razón de esto, probablemente me perdí algo simple (como agregar esa enumeración a un bloque de biblioteca, o lo que sea).
  • short generalmente significa un número entero corto, no un número de coma flotante de precisión simple.
  • El equivalente de float es single en VB, pero como he visto en otras preguntas sobre usted, sospecho que en realidad quería decir reemplazar single con float .

Por cierto, recomendaría publicar un archivo IDL mínimo (compilable) (despojado de la mayoría de las definiciones), que se asemeja más o menos a lo que está intentando compilar. Esto ayuda a evitar confusiones, ya que, por ejemplo, usa IS8Simulation en su texto, pero S8SimObject en su fragmento de IDL copiado. Y también ayudaría si especifica el resultado esperado y el error inesperado (para usted).

Editar

Bueno, este error de compilación que insertó ahora es simple: S8SimObject no está definido. Siempre debe hacer referencia a la interfaz en las declaraciones de método ( IS8Simulation ), nunca a la coclass que implementa la interfaz.

Como dijiste, estás cambiando un archivo IDL existente aquí: ¿Cuál es el objetivo básico? Si el archivo IDL original siempre usa S8SimObject , ¿tal vez el único problema es que la definición de S8SimObject no está incluida en la parte superior del archivo IDL? Si tiene la biblioteca de tipos que define S8SimObject , puede exportar el IDL de esta interfaz utilizando OleView.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top