Перейти к основному контенту
Центр разработки для Windows

 none
windows7 api-ms-win-shcore-scaling-1-1-1.dllがない RRS feed

  • Вопрос

  • Visual Studio 2017で開発したアプリケーションをWindows7で実行すると、

    api-ms-win-shcore-scaling-1-1-1.dllがないと警告が表示されてプログラムが起動しない。

    OS:Windows7 SP1

    Microsoft Visual C++ 2015-2019 Redistibutable(x86)-14.22.27821 はインストール済


    30 июля 2019 г. 0:15

Ответы

  • この中で Minimum supported client に Windows 8.1 からと書かれているので、使う際にきちんとドキュメントを読むことで回避することができるわけです。
    今回の例に限らず、新しいものを試される際は「どこから使えるのか?」を調べることを癖づけていただいた方が安全です。

    技術的にはjzkeyさんが「プロジェクトのWIN32_WINNTが不適切」と触れられています。

    WINVER および _WIN32_WINNT の変更で説明されていますが、例えば製品の動作環境をWindows 7以降と定めるのであれば

    #define _WIN32_WINNT _WIN32_WINNT_WIN7

    を先頭に指定すべきです。この指定がなされている場合、GetDpiForMonitor()などWindows 7で提供されていない関数はプリプロセッサにより除去されるため、コンパイルエラーとして摘出することができます。
    Windows 7 SP1追加関数はどうなるか、など厳密ではない部分もありますが、ある程度の指針になります。

    31 июля 2019 г. 14:15
  • サポートが2020年1月に切れるといえ、OSによって使えないAPIがあるとベンダーは対応が大変です。

    新しい OS、新しい SDK で関数が増えることは、機能拡張・改良と OS や SDK が進化している以上は正常な姿です。
    どちらかと言えば、その API を使うと決めた際の調査不足だと考えられます。
    (Windows に限った話ではない。Android であれ、iOS であれ、特定のバージョンから使えるというものは存在します)

    例に挙がっている、GetDpiForMonitor を検索すると以下のドキュメントが確認できます。
    https://docs.microsoft.com/en-us/windows/win32/api/shellscalingapi/nf-shellscalingapi-getdpiformonitor

    この中で Minimum supported client に Windows 8.1 からと書かれているので、使う際にきちんとドキュメントを読むことで回避することができるわけです。
    今回の例に限らず、新しいものを試される際は「どこから使えるのか?」を調べることを癖づけていただいた方が安全です。

    • Изменено AzuleanMVP, Moderator 31 июля 2019 г. 13:24
    • Помечено в качестве ответа miyanaga 3 августа 2019 г. 2:01
    31 июля 2019 г. 13:22
    Модератор

Все ответы

  • https://docs.microsoft.com/en-us/windows/win32/api/shellscalingapi/nf-shellscalingapi-getdpiformonitor
    こういう(Win8.1から実装されたような)APIを呼んでいるからでは?
    Windows7を対象にしてるなら、LoadLibrary/GetProcAddres経由で呼んで、かつ、フォールバックを実装する必要がるでしょう。
    リンクできてしまうのは、プロジェクトのWIN32_WINNTが不適切な気もします。

    jzkey


    • Изменено jzkey 31 июля 2019 г. 2:01 改行
    • Предложено в качестве ответа 佐祐理 3 августа 2019 г. 4:58
    31 июля 2019 г. 1:57
  • jzkeyさん

    参考になりました。

    私たちのアプリケーションは、高DPI対応で、GetDpiForMonitorを使用していました。

    サポートが2020年1月に切れるといえ、OSによって使えないAPIがあるとベンダーは対応が大変です。

    31 июля 2019 г. 6:58
  • サポートが2020年1月に切れるといえ、OSによって使えないAPIがあるとベンダーは対応が大変です。

    新しい OS、新しい SDK で関数が増えることは、機能拡張・改良と OS や SDK が進化している以上は正常な姿です。
    どちらかと言えば、その API を使うと決めた際の調査不足だと考えられます。
    (Windows に限った話ではない。Android であれ、iOS であれ、特定のバージョンから使えるというものは存在します)

    例に挙がっている、GetDpiForMonitor を検索すると以下のドキュメントが確認できます。
    https://docs.microsoft.com/en-us/windows/win32/api/shellscalingapi/nf-shellscalingapi-getdpiformonitor

    この中で Minimum supported client に Windows 8.1 からと書かれているので、使う際にきちんとドキュメントを読むことで回避することができるわけです。
    今回の例に限らず、新しいものを試される際は「どこから使えるのか?」を調べることを癖づけていただいた方が安全です。

    • Изменено AzuleanMVP, Moderator 31 июля 2019 г. 13:24
    • Помечено в качестве ответа miyanaga 3 августа 2019 г. 2:01
    31 июля 2019 г. 13:22
    Модератор
  • この中で Minimum supported client に Windows 8.1 からと書かれているので、使う際にきちんとドキュメントを読むことで回避することができるわけです。
    今回の例に限らず、新しいものを試される際は「どこから使えるのか?」を調べることを癖づけていただいた方が安全です。

    技術的にはjzkeyさんが「プロジェクトのWIN32_WINNTが不適切」と触れられています。

    WINVER および _WIN32_WINNT の変更で説明されていますが、例えば製品の動作環境をWindows 7以降と定めるのであれば

    #define _WIN32_WINNT _WIN32_WINNT_WIN7

    を先頭に指定すべきです。この指定がなされている場合、GetDpiForMonitor()などWindows 7で提供されていない関数はプリプロセッサにより除去されるため、コンパイルエラーとして摘出することができます。
    Windows 7 SP1追加関数はどうなるか、など厳密ではない部分もありますが、ある程度の指針になります。

    31 июля 2019 г. 14:15
  • miyanagaさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    ご質問いただいた件ですが、その後いかがでしょうか。
    佐祐理さんから寄せられた投稿はお役に立ちましたか。

    参考になった回答には [回答としてマーク] をお願い致します。

    設定いただくことで、
    他のユーザーもお役に立つ回答を見つけやすくなります。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2 августа 2019 г. 8:24
    Модератор