No hay definiciones de tipo en IDL FILE predefinido
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);
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
essingle
en VB, pero como he visto en otras preguntas sobre usted, sospecho que en realidad quería decir reemplazarsingle
confloat
.
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.