質問者
定数の値の調べ方について

質問
-
API呼び出しで使用するための定数の値はどこで調べればよいのでしょうか
例えば、
https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898561(v=vs.85).aspx
にて、
GetDeviceCaps
を使用したいと思ったとき、
[DllImport("gdi32.dll")]
extern static int GetDeviceCaps(IntPtr hdc, int index);
ののちに
horizontalDPI = GetDeviceCaps(desktopDc,LOGPIXELSX);
と書きますが、この
LOGPIXELSX の値はどこに記述されているのでしょうか。
現在はサーチエンジンで検索し、主に一般の方のサイトに掲載されている値を使用しています。const int LOGPIXELSX = 88;
すべての返信
-
Windows APIはC言語またはC++言語から呼び出すことを前提に設計されています。もちろん他の言語から呼び出すことも可能ではありますが、基本を忘れてはいけません。
例えば今回のGetDeviceCapsであればドキュメントの末尾のRequirementsの項にDLLの記載があり、DllImport属性に与えるべきファイル名が説明されています。各引数に与える定数についてもHeaderの記載があり、Wingdi.hにその値が定義されています。なお、C言語およびC++言語から使用する場合は定義場所に関わらずWindows.hをインクルードするようにとの指示もあります。
ここで言及されているWingdi.hファイルがどこに存在しているのかについては完全にC言語およびC++言語の話題となります。
# ちなみに手元の環境ではC:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\um\wingdi.hにありますが、実際の場所はVisual StudioのバージョンおよびWindows SDKのバージョンに強く依存します。ですのでやはりC言語およびC++言語を理解することをお勧めします。
-
APIのすべての定数が載っているかわかりませんが、
https://referencesource.microsoft.com
上記のMicrosoft公式のサイトで .NET Framework のソースコードが参照できます。
例えば、ページの左上のエディットボックスで「LOGPIXELSX」と入力してワード検索すると
public const int LOGPIXELSX = 88
というような定数の宣言が確認できます。- 編集済み kenjinoteMVP 2017年2月15日 1:31