积极答复者
windows7 api-ms-win-shcore-scaling-1-1-1.dllがない

问题
答案
-
この中で 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追加関数はどうなるか、など厳密ではない部分もありますが、ある程度の指針になります。- 已建议为答案 Haruka6002Microsoft contingent staff, Moderator 2019年8月2日 8:22
- 已标记为答案 miyanaga 2019年8月3日 2:01
-
サポートが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 2019年7月31日 13:24
- 已标记为答案 miyanaga 2019年8月3日 2:01
全部回复
-
https://docs.microsoft.com/en-us/windows/win32/api/shellscalingapi/nf-shellscalingapi-getdpiformonitor
こういう(Win8.1から実装されたような)APIを呼んでいるからでは?
Windows7を対象にしてるなら、LoadLibrary/GetProcAddres経由で呼んで、かつ、フォールバックを実装する必要がるでしょう。
リンクできてしまうのは、プロジェクトのWIN32_WINNTが不適切な気もします。
jzkey
-
サポートが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 2019年7月31日 13:24
- 已标记为答案 miyanaga 2019年8月3日 2:01
-
この中で 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追加関数はどうなるか、など厳密ではない部分もありますが、ある程度の指針になります。- 已建议为答案 Haruka6002Microsoft contingent staff, Moderator 2019年8月2日 8:22
- 已标记为答案 miyanaga 2019年8月3日 2:01
-
miyanagaさん、こんにちは。フォーラムオペレーターのHarukaです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
ご質問いただいた件ですが、その後いかがでしょうか。
佐祐理さんから寄せられた投稿はお役に立ちましたか。
参考になった回答には [回答としてマーク] をお願い致します。
設定いただくことで、
他のユーザーもお役に立つ回答を見つけやすくなります。
お手数ですが、ご協力の程どうかよろしくお願いいたします。
MSDN/ TechNet Community Support Haruka
ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~