問題タブ [visual-c++-2015]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
558 参照

visual-c++ - XP Embedded では LoadLibrary が 0xC000001D で失敗するが、XP Pro では期待どおりに動作する

以前はVC++ 2005を使用して構築された、かなり古いインプロセスATL COMサーバーがいくつかあります。

現在、これらのプロジェクトは VC++ 2015 に移植されています。
従来の Win XP システムをサポートする必要があるため、プラットフォーム ツールセットは「VS 2015 - Windows XP」です。また、this issueに従って、/Zc:threadSafeInit-コンパイラ オプションが設定されます。

すべてのサーバーは ATL 属性を使用して記述されており、各プロジェクトには次のようなものがあります。

問題。これらのプロジェクトはすべて WinXP Pro で問題なく動作します。しかし、それらを XP Embedded マシンに登録しようとすると、LoadLibrary呼び出し時に 0xC000001D エラー コードが表示されます。

このエラーを修正/診断するにはどうすればよいですか?

PS これが理にかなっている場合、XP 組み込みシステムは最上位の AMD Geode プロセッサ上に構築されていますが、XP Pro システムは通常の Intel プロセッサ上に構築されています。

0 投票する
0 に答える
369 参照

c++ - C4503 警告ですが、名前はそれほど長くないようです

警告 4503「装飾された名前の長さを超えました。名前が切り捨てられました」という単一の問題が発生しています。大きなプロジェクト全体で 1 つしかなく、Boost テンプレートに関する限り、これは特に長い名前ではないようです!

MSVC++ コンパイラの各バージョンは制限を拡張するため、VS2015 までには Boost MPL を問題なく処理できると期待しています。

では、比較的平凡なテンプレートの使用法であるこれ (およびこれのみ) に警告が表示されるのはなぜでしょうか? CRTP を含むクラスのスマート ポインターは、非常に長くなります。

このサイトで読んだ他の回答があるため、一般的に警告を無効にすることをためらっています。特に珍しいので、どうなっているのか知りたいです。

0 投票する
2 に答える
2411 参照

c++ - secure _vsnprintf_s で必要なバッファー長を取得する

MSVC の最新のセキュリティ更新プログラムに準拠するように「レガシー」コードを更新しようとしていますが、 から_vsnprintfへの移行で問題に直面してい_vsnprintf_sます。

具体的には_vsnprintf、null バッファーとカウント/長さのゼロで呼び出し、結果を取得し、必要なサイズ ( ) のバッファーを割り当ててから、新しく割り当てられたバッファーと既知の正しいサイズで再度return value + 1呼び出していました。_vsnprintf

この動作は、MSDN で文書化されています

count で指定されたバッファー サイズが、format と argptr で指定された出力を格納するには十分に大きくない場合、vsnprintf の戻り値は、count が十分に大きい場合に書き込まれる文字数になります。戻り値が count - 1 より大きい場合、出力は切り捨てられています。

で同じことをしようとしています_vsnprintf_sが、そのドキュメントには同じが含まれていません。代わりに言う

データを格納するために必要なストレージと終端の null が sizeOfBuffer を超える場合、count が _TRUNCATE でない限り、パラメーターの検証で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 1 が返されました。

とにかく次の方法で試してみてください:

これにより、「長さ」がゼロになります。_TRUNCATE代わりに (-1) をカウントとして渡すと、次のアサーションは失敗します。

式: buffer != nullptr && buffer_count > 0

オーバーライド_set_invalid_parameter_handlerして、どうにかして長さを調べることは可能だと思いますが、もっと簡単な方法が必要ですか?

0 投票する
1 に答える
284 参照

floating-point - 浮動小数点数を丸める方法は? C++/CLI - VS2015

a、b の2 つの浮動小数点数があるとします。aの値をbに割り当てる必要があります。次に、bは関数によってテキスト文字列に変換されますが、これは変更できません。変換は、浮動小数点数の最初の 3 桁を丸めに取得することによって行われ、他のポイントは無視されます。これは精度の低下につながります。

質問:変換後にbが丸められた場合のようになるように、 a の値を変更するにはどうすればよいですか?

問題を説明できたことを願っていますが、そうでない場合は教えてください。

0 投票する
1 に答える
512 参照

c - Visual C++ 2015 の /GL (プログラム全体の最適化) および /OPT:REF (参照の最適化) により、静的初期化子が呼び出されなくなります

はじめに: C++ のグローバルな静的オブジェクトは、main()開始前に初期化されます。検討:

および割り当てが開始前に実行されるglob = 1ため、出力はです。コードの順序は関係ありません。calc_it()main()

ここで、そのようなコードを含む複数のソース ファイルがあり、さらにそれらが相互に依存していると想像します (何らかの理由で、特定の実行順序が必要です。それが良い設計か悪い設計かについては触れません)。

実行の順序は標準では定義されていませんが、Visual C++ でそれらに特定の順序を課す方法は存在します。グローバルな静的オブジェクトの場合、オブジェクト定義の前に使用#pragma init_seg(SECTIONNAME)して、特定のセクション名を指定できます。

しかし、最終的にこれは、コンパイラ(__cdecl *)(void)が特定のリンカ セクション (すべて で始まる.CRT$XC) の関数へのポインタを配置することにつながるだけです。セクション名は、リンカーによってメモリ レイアウトが決定される前に、辞書順に並べられます。デフォルトのセクション名は.CRT$XCU. 次に、C/C++ の初期化コードは、 と の間のこれらのセグメントの内容を関数へのポインター.CRT$XCAと見なし、.CRT$XCZそれらを 1 つずつ呼び出します。

#pragma data_seg(SECTIONNAME)これは、ディレクティブを使用して手動で行うこともできます。したがって、この:

出力します:

それはどれほどいいですか?:)

問題の説明: 私の知る限り、Visual C++ 2015 以降、/GLオプション (プログラム全体の最適化) を/OPT:REFリンカー オプション (未使用の関数とデータを削除する) と一緒に使用すると、これは機能しなくなります。その理由は、リンカの観点から、_init_ptrが使用されないことが原因である可能性があります。古いバージョンの Visual Studio では、使用されていないデータは削除されず、使用されたコードのみが削除されるため、これは機能していました。

質問:単一のシンボルのみでこれを回避するにはどうすればよいですか?

0 投票する
1 に答える
2484 参照

visual-studio - Visual Studio の汚染からソース コード ファイルを抽出するにはどうすればよいですか?

ソース コードが存在するディレクトリには、*.user、*.vcxproj などの Visual Studio 関連のファイルもあります。そしてDebugフォルダRelease

プロジェクト ディレクトリのレイアウトを次のように変更したいと思います。

たとえば、プロジェクトの名前は ProjectX です。

ProjectX のメイン フォルダーには、次の 2 つのサブフォルダーしかありません。

  • ProjectX/ソース

  • ProjectX/ビルド

ProjectX/Source には、すべてのソース コード ファイルがありますが、他には何もありません。

ProjectX/Build には、すべての Visual Studio 関連ファイルがあります。

どうすればいいですか?

0 投票する
0 に答える
321 参照

c# - Windows 7 から 10 へのアップグレード後の VC2015 再頒布可能パッケージ (更新なし、更新 1、更新 2) の確認

Visual C++ 2015 x86 再頒布可能パッケージが必要な DLL を読み込んで呼び出す前に、それがインストールされているかどうかを確認するソフトウェアがあります。MsiQueryProductStateチェックは、次の宣言を使用して、への相互運用呼び出しを介して行われます

そして呼び出しは

これは以前は機能していましたが、Windows 10 と元の更新されていない再配布可能ファイルがインストールされている他のマシンでも機能します。

C# Windows デスクトップ開発用の Update 2 で VS2015 を使用します。これには、再配布可能な Update 2 が含まれています。

数週間前、Windows 7 を Windows 10 にアップグレードしたところ、昨日、チェックが戻るから戻ってきたことがわかりましINSTALLSTATE_DEFAULTINSTALLSTATE_UNKNOWN。アップグレード後に初めてわかったので、これが問題と関係があるかどうかはわかりません。

グーグルで検索しても何も見つからなかったので、レジストリと再配布可能なインストール ログ ファイルを検索したところ、次のキーが見つかりました。

しかし、私がそれを正しく行っているかどうかは、まったくわかりません。最初の 2 つが返さINSTALLSTATE_UNKNOWNれ、後の 2 つが返されINSTALLSTATE_DEFAULTます。これは機能しますが、それが正しいかどうかはわかりません。すべてのバージョンと更新で同じキーが使用されると思いました。

だから、私が尋ねようとしている質問は、Visual C++ 2015 x86 Redistributables の互換性のあるバージョンがインストールされているかどうかを知るために、どのキーを照会する必要があるかということです。