Sto provando a collegare un file oggetto che utilizza due metodi dichiarati in winuser.h e definito in User32.dll: GetMonitorInfo e WindowFromMonitor. La fonte compila in un file oggetto bene, ma quando provo a collegare, ottengo il seguente output di errore:Errore di collegamento 2001 durante il collegamento a User32.dll
D3dCtx.obj : error LNK2001: unresolved external symbol xGetMonitorInfo
D3dCtx.obj : error LNK2001: unresolved external symbol xMonitorFromWindow
Il fatto è che non mi chiamano "xGetMonitorInfo" o "xMonitorFromWindow". L'esecuzione di grep su tutti i file sorgente mostra che vengono chiamati solo "GetMonitorInfo" e "WindowFromMonitor". Sto includendo correttamente windows.h, che include winuser.h. Sto anche impostando correttamente il mio LIBPATH nelle opzioni del linker, che è confermato dall'output del link dettagliato.
Di seguito appare anche nel mio verbose uscita link:
Found __imp_GetMonitorInfoA
Referenced in nafxcw.lib(afxribboncategory.obj)
Referenced in nafxcw.lib(afxtooltipctrl.obj)
Referenced in nafxcw.lib(afxribbonkeytip.obj)
Referenced in nafxcw.lib(afxfullscreenimpl.obj)
Referenced in nafxcw.lib(afxframeimpl.obj)
Referenced in nafxcw.lib(afxglobalutils.obj)
Referenced in nafxcw.lib(afxdropdowntoolbar.obj)
Referenced in nafxcw.lib(wincore.obj)
Referenced in nafxcw.lib(afxglobals.obj)
Referenced in nafxcw.lib(afxpopupmenu.obj)
Referenced in nafxcw.lib(afxpropertygridtooltipctrl.obj)
Loaded User32.lib(USER32.dll)
Found __imp_MonitorFromWindow
Referenced in nafxcw.lib(wincore.obj)
Loaded User32.lib(USER32.dll)
Inoltre, GetMonitorInfo è definito in Winuser.h come:
WINUSERAPI
BOOL
WINAPI
GetMonitorInfoA(
__in HMONITOR hMonitor,
__inout LPMONITORINFO lpmi);
WINUSERAPI
BOOL
WINAPI
GetMonitorInfoW(
__in HMONITOR hMonitor,
__inout LPMONITORINFO lpmi);
#ifdef UNICODE
#define GetMonitorInfo GetMonitorInfoW
#else
#define GetMonitorInfo GetMonitorInfoA
#endif // !UNICODE
Quando cambio ogni riferimento a "GetMonitorInfo" a " GetMonitorInfoA ", ottengo solo
D3dCtx.obj: errore LNK2001: simbolo esterno non risolto xMonitorFromWindow
come output del mio errore del linker. Sfortunatamente, MonitorFromWindow non sembra avere più versioni disponibili.
Devo notare che sto usando le versioni a 64 bit delle librerie, link e cl.
Cosa sta succedendo qui e come posso collegare correttamente il mio programma?
Cogne come problemi di macro. Grep for x ### –
Bene, non ho trovato la macro che stava causando questo, e solo un file fa riferimento a queste funzioni. Tuttavia, il tuo commento mi ha ispirato a risolvere il problema utilizzando le macro. Non è la soluzione migliore (e mi fa un po 'male), ma questo codice deve solo essere compilato, non mantenuto. –