2012-06-11 40 views
5

Tôi đang cố chụp một sự kiện và tham khảo GUID để xem sự kiện đó là gì. Mã này là dưới đây:Tham chiếu GUIDs

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; 
} 

này biên dịch tốt nhưng tôi nhận được lỗi dưới đây khi liên kết:

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 

Điều kỳ lạ là sti.h được liên kết trong khi tôi đang kéo hằng khác từ nó. Tôi đã thông báo bởi các decleration GUID sau:

#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 

Liệu các "nếu định nghĩa" dòng dừng GUIDs đang được tham chiếu (Tôi viết một giao diện điều khiển ứng dụng win32) hoặc là có một cái gì đó cơ bản hơn tôi có sai ở đây để làm với sự thiếu hiểu biết về GUID?

Cảm ơn, trước sự giúp đỡ của bạn.

Chúc mừng,

Neil

+0

Tôi nghĩ rằng thường GUID được khai báo trong tệp tiêu đề nhưng được xác định trong thư viện bên ngoài. Để khắc phục sự cố, bạn chỉ cần liên kết thư viện với chương trình của mình. Một tùy chọn khác là bao gồm trước khi bao gồm tệp tiêu đề đó; điều này thay đổi macro DEFIN phê để thực sự xác định GUID nội tuyến chứ không phải là extern. – Luke

Trả lời

18

#include <initguid.h> nên được bổ sung. Điều đó có thể giúp bạn.

+0

Thông tin này cực kỳ hữu ích! – user23573

+1

Đây là câu trả lời đúng. –

6

Các DEFINE_GUID vĩ mô một trong hai định nghĩa một tên GUID như một tĩnh, hoặc chỉ cần một tuyên bố mong muốn thực sự được thực hiện ở một nơi khác. Mã của bạn có lẽ chỉ có mã sau và các ký hiệu không có khởi tạo thực tế trong dự án.

Xem: