none
定数の値の調べ方について RRS feed

  • 質問

  • 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;


    2017年2月14日 20:18

すべての返信

  • 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++言語を理解することをお勧めします。

    2017年2月14日 21:42
  • 変数に限らず

    msdn キーワード

    で検索。

    メソッド名とか一般的過ぎたり、.netクラスだったりで、javaが引っかかる場合は、win32とか、c#とかを更に追加すれば大体絞れます。

    * ランタイムのバージョン違いに注意

    * bing翻訳はショボいのでchrome

    * ディスク容量に余裕があるなら、古いAPIはMSDN Libraryをオフラインインストール手もあります
    • 編集済み tmori3y2 2017年2月14日 22:04
    2017年2月14日 21:59
  • サーチエンジンでの検索でよいという見解でしょうか?

    「このLOGPIXELSXの値はどこに記述されているのでしょうか。現在はサーチエンジンで検索し、主に一般の方のサイトに掲載されている値を使用しています。」という質問文に対する回答としては不適切に思います。

    2017年2月14日 22:28
  • すみません。

    確かに、LOGPIXELSX はAPIリファレンスに載っていませんでした。

    載っていないものはヘッダーを当たるしかないですね。

    失礼しました。

    2017年2月14日 22:38
  • 佐祐理さま、 tmori3y2さま。ありがとうございます。

    SDKや検索など、とりあえずは入手できるもので試してみます。


    2017年2月15日 1:17
  • APIのすべての定数が載っているかわかりませんが、

    https://referencesource.microsoft.com

    上記のMicrosoft公式のサイトで .NET Framework のソースコードが参照できます。

    例えば、ページの左上のエディットボックスで「LOGPIXELSX」と入力してワード検索すると

    public const int LOGPIXELSX = 88


    というような定数の宣言が確認できます。
    2017年2月15日 1:29
  • https://github.com/Microsoft/referencesource/blob/master/System.Workflow.Activities/Common/NativeMethods.cs

    こっちがMITライセンスなので良いかもしれません。

    なぜWorkflowかと言うのがありますが。

    PInvokeとapiの定数宣言はNativeMethodsに入れるのが流儀らしいです

    2017年2月15日 1:58