2011-09-13 9 views
5

win32.hで宣言され、User32.dllで定義された2つのメソッドGetMonitorInfoとWindowFromMonitorを使用するオブジェクトファイルをリンクしようとしています。ソースがオブジェクトファイルにうまくコンパイルが、私はリンクしようとすると、私は次のエラー出力を得る:User32.dllへのリンク時のリンクエラー2001

D3dCtx.obj : error LNK2001: unresolved external symbol xGetMonitorInfo 
D3dCtx.obj : error LNK2001: unresolved external symbol xMonitorFromWindow 

事は、私が「xGetMonitorInfo」または「xMonitorFromWindow」を呼び出すことはありません、です。すべてのソースファイルでgrepを実行すると、「GetMonitorInfo」と「WindowFromMonitor」だけが呼び出されていることがわかります。私は適切にwin.hを含むwindows.hを含んでいます。リンカオプションでLIBPATHを適切に設定していますが、これは冗長なリンク出力によって確認されます。

次のようにも私の冗長リンク出力に表示されます:私は「へ "GetMonitorInfo" へのすべての参照を変更する場合

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 

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) 

さらに、GetMonitorInfoは次のようにWINUSER.Hに定義されていますGetMonitorInfoA "、取得のみ

D3dCtx.obj:エラーLNK2001:未解決の外部シンボルxMonitorFromWindow

として私のリンカエラー出力。残念ながら、MonitorFromWindowは複数のバージョンを利用できないようです。

私は64ビットバージョンのライブラリ、リンク、およびclを使用していることに注意してください。

ここでは何が起こっていますか、プログラムを正常にリンクするにはどうすればよいですか?

+1

マクロトラブルのようなクエックス。 Grep for x ## –

+0

これを引き起こしていたマクロが見つかりませんでした。これらの関数を参照するファイルは1つのみです。しかし、あなたのコメントは、マクロを使って問題を回避するように私にインスピレーションを与えました。それは最善の解決策ではありません(そして私は少し傷つきます)が、このコードは実際にはコンパイルする必要があり、維持する必要はありません。 –

答えて

2

私はあなたがこれを解決するかどうかを見つけることができたかどうかわからないしかし、私は同じ問題を抱えていたし、これが起こった理由は、私がmultimon.h

をした場合のように見えるファイルの名前含まれていたことでした64ビットコンパイルは、マクロ定義のために、これらの関数の定義は2つのソースから来ており、おそらくmultimon.hからの1つがオーバーライドして間違っています。

私はこのインクルードをコメントアウトして解決しました。リンクが正常に開始されました。

//#include <multimon.h> 
+0

ありがとう、私の回避策は、インクルードの後に​​マクロを再定義することだけでしたが、実際の解決策を知ってうれしいです。 –

関連する問題