私はイベントをキャプチャし、それがどのイベントであるかを見るためにGUIDを参照しようとしています。コードは以下の通りです: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;
}
これはうまくコンパイルが、リンク時に、私は以下のエラーを取得:
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
奇妙なことは、私はから他の定数を引っ張っていますようsti.hがでリンクされていることですそれ。私は、次のGUIDのdeclerationによって予告をした:行うためにここに私が間違ってい
#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
は「もし定義された」行は、GUIDのが参照されて停止しない(私はWin32コンソールアプリケーションを書いています)以上の根本的な何かがありますGUIDの理解が不足していますか?
ご協力いただきありがとうございます。
乾杯、
ニール
一般に、GUIDはヘッダファイルで宣言されていますが、外部ライブラリで定義されていると思います。問題を解決するには、ライブラリをプログラムにリンクするだけです。もう1つの方法は、そのヘッダファイルを含める前にを含めることです。 DEFINE_GUIDマクロを変更して、externではなくGUIDを実際に定義します。 –
Luke