Windowsにおいて、GetMonitorInfoやMonitorFromPointなどのマルチモニタAPIを使用するときによく発生するエラーと、その対処法を紹介します。
スクリーン上の座標x,yが属するモニタの情報を取得するため、以下のようなコードを書いたとします。
POINT Point = {x, y}; MONITORINFO MonitorInfo; HMONITOR MonitorHandle = ::MonitorFromPoint(Point, MONITOR_DEFAULTTOPRIMARY); MonitorInfo.cbSize = sizeof(MonitorInfo); ::GetMonitorInfo(MonitorHandle, &MonitorInfo);
特に変哲のない普通にコードですが、これだけのコードでもコンパイルエラーやリンクエラーに悩まされます。
最初に出会うのがこのコンパイルエラーです。
error C2065: 'MONITORINFO' : 定義されていない識別子です。
MOINTERINFOの説明(MSDN)を読むと、windows.hをインクルードするだけで良い様に思えますが、 どうやらmultimon.hというヘッダファイルをインクルードする必要があるようです。
次に出会うのがこのリンクエラーです。
LNK2019: 未解決の外部シンボル _xGetMonitorInfo@8 が関数 "XXX" (YYY) で参照されました。
これを回避するためには、以下のコードを何れか一つのソースファイルに書いておく必要があるようです。
#define COMPILE_MULTIMON_STUBS #include <multimon.h>
これでようやく最初のコードが動きます。簡単なようで、大変ですね。
なお、後者のリンクエラーの方は、場合によっては出ないようです。どのような場合か特定できていませんが、もしかしたらMFCを使うとエラーがでなくなるのかもしれません。
投稿者 MASATO : 2006年06月09日 00:21 | トラックバック