2012-06-11 22 views
5

Estoy tratando de capturar un evento y hacer referencia a un GUID para ver qué evento es. El código es el siguiente:Referenciando GUID

DWORD WINAPI AvisionEventProc(LPVOID lpParam){ 
    //HANDLE hEvent = * (HANDLE *) lpParam; // This thread's read event 
    STINOTIFY pStiNotify; 

    if (debug){ 
     wprintf(L"Avision Event\n"); 
    } 
    while(true){ 
     WaitForSingleObject(hAvisionEvent, INFINITE); 
     wprintf(L"Event"); 
     pStiDevice->GetLastNotificationData(&pStiNotify); 
     if (pStiNotify.guidNotificationCode == GUID_STIUserDefined1){ 
      wprintf(L"User defined 1"); 
     }else if (pStiNotify.guidNotificationCode == GUID_STIUserDefined2){ 
      wprintf(L"User defined 2"); 
     }else if (pStiNotify.guidNotificationCode == GUID_STIUserDefined3){ 
      wprintf(L"User defined 3"); 
     } 

     ResetEvent(hAvisionEvent); 
    } 
    return 1; 
} 

Esto compila bien pero me da los siguientes errores al vincular:

1>sti.obj : error LNK2001: unresolved external symbol _GUID_STIUserDefined3 
1>sti.obj : error LNK2001: unresolved external symbol _GUID_STIUserDefined2 
1>sti.obj : error LNK2001: unresolved external symbol _GUID_STIUserDefined1 

Lo extraño es que sti.h está vinculada en que estoy tirando de otras constantes eso. Me di cuenta por la decleration GUID lo siguiente:

#if defined(_WIN32) && !defined(_NO_COM) 

/* 
* Class IID's 
*/ 

// B323F8E0-2E68-11D0-90EA-00AA0060F86C 
DEFINE_GUID(CLSID_Sti, 0xB323F8E0L, 0x2E68, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C); 

/* 
* Interface IID's 
*/ 

// {641BD880-2DC8-11D0-90EA-00AA0060F86C} 
DEFINE_GUID(IID_IStillImageW, 0x641BD880L, 0x2DC8, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C); 

<snip> 

/* 
* Standard event GUIDs 
*/ 

// {740D9EE6-70F1-11d1-AD10-00A02438AD48} 
DEFINE_GUID(GUID_DeviceArrivedLaunch, 0x740d9ee6, 0x70f1, 0x11d1, 0xad, 0x10, 0x0, 0xa0, 0x24, 0x38, 0xad, 0x48); 

<snip> 

#endif 

¿El "si se ha definido" línea de dejar de ser referenciados los GUID (Estoy escribiendo una aplicación de consola Win32) o hay algo más fundamental que tengo mal aquí hacer con una falta de comprensión sobre los GUID?

Gracias, de antemano por su ayuda.

Saludos,

Neil

+0

Creo que generalmente los GUID se declaran en los archivos de cabecera pero se definen en una biblioteca externa. Para solucionar el problema, solo necesita vincular la biblioteca a su programa. Otra opción es incluir antes de incluir ese archivo de encabezado; esto cambia la macro DEFINE_GUID para definir realmente los GUID en línea en lugar de como extern. – Luke

Respuesta

18

#include <initguid.h> debe añadirse. Eso ayudará.

+0

¡Esta información fue extremadamente útil! – user23573

+1

Esta es la respuesta correcta. –