[ad_1]
最新の Visual Studio 2022 / C++ / MFC、Windows SDK 10.0、プラットフォーム ツールセット 10.0 (最新のインストール バージョン)、C++ 言語標準 ISO C++ 17 Standard を使用し、64 ビットをビルドしています。
標準の MDI テンプレートから開始し、いくつかの要素 (ISO C++ 17 以上が必要な Scintilla 編集コントロール) を追加し、正常にコンパイルしました。
現在、以前の開発からの既存のソース コードを統合しています (ISO C++ 14 でコンパイルされますが、それはこれから説明する内容の説明ではないかもしれません)。
現在、コンパイルが次のエラーで失敗しています。
Error C1189 #error: CTaskDialog is not supported on Windows versions prior to Vista. Visual SQL Studio C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\atlmfc\include\afxtaskdialog.h 18
… そして
Error C2664 'INT getaddrinfo(PCSTR,PCSTR,const ADDRINFOA *,PADDRINFOA *)': cannot convert argument 1 from 'LPCTSTR' to 'PCSTR' Visual SQL Studio C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.38.33130\atlmfc\include\atlsocket.h 163
したがって、私のコードにはありません。 どちらの場合も、Windows バージョンの #define に基づいて条件付きコンパイルが行われます。 たとえば、最初のエラーのコードは次のとおりです。
#if (NTDDI_VERSION < NTDDI_VISTA) // min Windows Vista required #error CTaskDialog is not supported on Windows versions prior to Vista. #endif
これについての私の解釈は、コンパイラが NTDDI_VERSION の値が NTDDI_VISTA の値よりも小さいとみなしているため、エラーが発生するということです。
ただし、pch.h、framework.h、targetver.h のプロジェクト テンプレートによって作成されたデフォルトをすべて使用しているだけです。これは、(私の理解が正しければ)
#include <SDKDDKVer.h>
。
それで、私はこの問題の説明や解決法について頭を悩ませています。 Windows バージョンの #defines を他の場所で再定義することは絶対にありません。 しかし、私は思います
NTDDI_VERSION
この編集 (私が知っているように、冒涜) によりコンパイルが成功するため、バージョン テストが適用されるヘッダー ファイルの時点では実際には未定義です。
#undef NTDDI_VERSION #define NTDDI_VERSION NTDDI_WIN10 #if (NTDDI_VERSION < NTDDI_VISTA) // min Windows Vista required #error CTaskDialog is not supported on Windows versions prior to Vista. #endif
AfxTaskDialog.h を編集することは明らかに許容できる解決策ではありません。そのため、この問題を診断/解決する方法についての提案をいただければ幸いです。
フレームワーク/プラットフォーム定義の概要
pch.h – #最初の行として「framework.h」を含めます。
Framework.h – #最初の行として「targetver.h」を含める
targetver.h – #最初の行として
私が試したこと:
pch.h および / または Framework.h および / または targetver.h で NTDDI_VERSION を明示的に #define しました。 NTDDI_VERSION をハードコーディングすることで、NTDDI_VERSION が #if (NTDDI_VERSION < NTDDI_VISTA) テストに合格するように強制しました (これは機能しますが、実行可能な解決策ではありません)。
解決策 1
C/C++ 詳細タブのコンパイラ設定で最初の問題を解決するには、「インクルードを表示」を選択すると、ビルド中にインクルード シーケンスが表示されます。この方法で、 NTDDI_VERSION
関心のあるファイルの前に定義されているか、どこかで未定義である可能性があります。 また、SDKDDKVer.h が最初に含まれていることを確認してください。これをプリコンパイル済みヘッダー ファイル (pch.h) の最初に置くようにしてください。
2 番目のエラーは、TCHAR が UNICODE 文字として定義されているにもかかわらず、関数が CHAR を予期しているというエラーです。 設定を UNICODE ではなく MBCS に変更します (プロパティの[全般]タブで[文字セット]値を選択します)。これは、コードではない場合に役立ちます。そうでない場合は、コードで渡されたパラメーターを確認できます。
これがお役に立てば幸いです。
よろしく、
マキシム。
[ad_2]
コメント