• Jueves 25 de Abril de 2024, 09:45

Autor Tema:  Archivos .h, .idl Y .lib  (Leído 2003 veces)

Black_angel

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Archivos .h, .idl Y .lib
« en: Martes 14 de Diciembre de 2004, 19:27 »
0
Hola a todos,


sé que este foro es de sólo código y la cuestión que voy a plantear aquí trata en gran parte de una herramienta de desarrollo, pero sin embargo algunos conceptos creo que se pueden sacar también aparte.
En primer lugar estoy desarrollando una aplicación que tiene que utilizar la API RTC (Real Time Comunication) la cuál viene definida en los siguientes archivos:
Cabeceras: rtcoore.h, rtcoore.idl. (el archivo .idl sé que es un archivo de definición de interfaz, pero no tengo ni idea de qué hace ni para qué sirve, nisiquiera si me hace falta).
Librería a linkear: uuid.lib
Esta API es un objeto COM, cuya inicialización por ejemplo se haría de la siguiente forma (código sacado de microsoft):


_______________________________________________________

HRESULT hr = S_OK;
// RTC Initialization
// Note: Use the apartment threaded model because
// RTC applications are not thread safe.
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
// Create the RTC Client COM object.
IRTCClient *pIRTCClient;
hr = CoCreateInstance( CLSID_RTCClient,
NULL,
CLSCTX_INPROC_SERVER,
IID_IRTCClient,
reinterpret_cast<void **> (&pIRTCClient) );
// if (hr != S_OK) process error here.
// Initialize the RTCClient interface.
hr = pIRTCClient->Initialize();
// if (hr != S_OK) process error here.

________________________________________________________


El problema que tengo es el siguiente... esta aplicación la estoy desarrollando en "Embedded Visual C++" (es totalmente igual a "Visual C++" solo que para dispositivos móviles).
En el menú "Tools" -> "Options" en la pestaña de "Directories" incluyo para los archivo .h y .lib la ruta donde se encuentran, y en la ventana donde se encuentra el workspace y todos los archivos fuente, resources y de cabecera.. añado la librería uuid.lib (ésta también la tengo añadida en "Project" -> "Settings" en la pestaña de "Link" en "Object/Library modules").

Si compilo así la aplicación y la prueba me sale el siguiente error:
Linking...
InterfazExternaDlg.obj : error LNK2001: unresolved external symbol _CLSID_RTCClient
InterfazExternaDlg.obj : error LNK2001: unresolved external symbol _IID_IRTCClient
emulatorDbg/InterfazExterna.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

Ahora lo que he hecho es probar añadiendo el archivo rtccore.idl al proyecto... y bueno... al probarlo me sale el siguiente error:

Creating Type Library...
rtccore.idl
oaidl.idl
objidl.idl
unknwn.idl
wtypes.idl
basetsd.h
ocidl.idl
oleidl.idl
control.odl
Error executing midl.exe.

InterfazExterna.exe - 1 error(s), 0 warning(s)




¿Qué es el archivo .idl? al ser un archivo de cabecera... ¿con utilizar el .h no valdría?
Como pueden ver tengo muchas dudas con esto de los objetos COM, su funcionamiento y cómo linkarlo todo para que funcione. A cualquier pequeña ayuda les estaría muy agradecido.
Aténtamente, y gracias de antemano por las respuestas:  :hola:


Black_angel.