問題タブ [crt]

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 投票する
3 に答える
1886 参照

c++ - _beginthreadex に 64 ビットのスレッド識別子を提供する方法

一部のコードを 64 ビットに移植しようとしていますが、スレッドアドレス識別子_beginthreadexが32 ビットであり、関数から64 ビットアドレスunsigned int識別子を送受信できないようです。

MSDN のドキュメントを確認しましたが、関数の 64 ビット バージョンは見つかりませんでした。間違ったヘッダーやプロセッサごとのフラグを含めているのでしょうか、それとも 64 ビットアドレス識別子を持つスレッドを作成する別の方法がありますか?

アップデート

ドキュメントには、thrdaddrパラメーターが 32 ビットであると記載されています。

スレダドル

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

windows - Windows アカウント間の異なるランタイム

すべてではなく一部のコンピューターで Windows サービスを実行する際に問題があります。

VS2008 で書かれており、VC ランタイムが必要です。最初に VC ランタイムをインストールしてから、管理者がサービスをインストールしました。

サービス ログオン ユーザーは、管理者グループの libwb です。その後、一部のコンピューターでサービスを実行できないことがわかりました。それらにはすべてユーザー libwb があり、パスワードは正しいです。

次に、サービスのログオン ユーザーを SYSTEM に変更しましたが、そのままです。

最後に、サービスのログオン ユーザーを管理者に変更しました。出来た。

それで、何が違うのですか?

サービスにはメイン関数のログがありますが、失敗したときのログファイルには何もありません。そのため、liwb または SYSTEM を使用してサービスを実行すると、VC ランタイムが見つからなかったと思います。そして、libwb、SYSTEM、Administrator の実行時間は異なると思います。

知らなかったけどなんで?この問題に関するリソースはありますか?

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

certificate - GoDaddy 証明書を使用して AppHarbor 内で証明書を作成する方法

GoDaddy からワイルドカード証明書を購入しました。この証明書を AppHarbor の Web サイトに関連付けたいと考えています。

AppHarbor では、PFX 証明書のみをアップロードできます。では、.CRT を .PFX に変換するにはどうすればよいでしょうか。

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

c - _invalid_parameter はリリース ビルドで有用な情報を取得しません

_set_invalid_parameter_handler を使用して、CRT 関数が無効なパラメーターを取得したときのプログラムの既定の動作をオーバーライドしています。これは、0xc0000417 (STATUS_INVALID_CRUNTIME_PARAMETER) でクラッシュします。

これは私のハンドラです:

情報をログに記録し、エラー レポートを送信したい。デバッグ ビルドではパラメーターを使用して有用な情報を取得できますが、リリース ビルドではすべてのパラメーターが NULL であり、あまり役に立ちません。リリース ビルドにも有用な情報を追加する方法はありますか?

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

visual-studio - プロジェクトのデバッグおよびリリース構成で使用するサードパーティ ライブラリを適切にビルドするにはどうすればよいですか?

異なるバージョンの MSVC でいくつかのプロジェクトで使用するサード パーティ製ライブラリをビルドする必要がある場合、通常はすべてのMSVC バージョンとデバッグ構成とリリース構成の両方に対してビルドします。それがブーストの役割であり、私たちのチームがこれまでずっとやってきたことです。

しかし、私はまだ理解していません.どうしてこのライブラリをビルドできなかったのですか...何でも. 必要なのは、関数プロトタイプとオブジェクト コードだけですよね? CRT を静的にリンクしているので、外部依存関係はありません。しかし、MSVC8 の Release でビルドされたライブラリを MSVC10 の Debug のプロジェクトにリンクしようとすると、この迷惑な「定義済み」リンカー エラーが発生します。

しかし、なぜ?このすべての関数を lib 内に「カプセル化」し、それらをエクスポートせずにプロジェクトが lib から必要なものだけを取得できるようにすることはできますか? すべてのプロジェクトでリンクできる libpng と zlib のプリコンパイル済みバージョンを使用できるのはなぜですか? はい、MSVC を使用してビルドされていないと思いますが、CRT の同じ機能を使用しています。誰かが詳細に説明したり、この問題の賢明な説明へのリンクを共有したりできますか?

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

c++ - なぜ /MD がコンパイラのオプションなのですか? リンカじゃない?

重複の可能性:
ランタイム ライブラリがリンカー オプションではなくコンパイラ オプションであるのはなぜですか?

コンパイル段階で RTL のタイプを選択しなければならない理由がよくわかりません。

たとえば、オプション /MD を使用して 1 つのスタティック ライブラリ A.lib を作成しました。次に、オプション /MT を使用して 2 番目の静的ライブラリ B.lib を作成しました。

A.lib と B.lib を C.exe にリンクしようとすると、リンカー エラーが発生します。

しかし、コンパイル段階 (A.lib および B.lib の作成) では、c または c++ ランタイムからシンボルを解決する理由はありません。

0 投票する
5 に答える
5382 参照

c - vsnprintfについて(インタビュー)

インタビュー中に、(とりわけ) 次の機能を実装するように要求されました。

に似てsprintfいますが、既に割り当てられているストレージの代わりに、関数がそれ自体を割り当て、*psz変数に返す必要があることを除きます。さらに、*pszすでに割り当てられている (ヒープ上にある) 文字列を指している可能性があり、これはフォーマット中に使用される可能性があります。当然、この文字列は適切な手段で解放する必要があります。

戻り値は、新しく作成された文字列の長さ、またはエラーの場合は負になります。

これは私の実装です:

質問の作成者は、この実装にはバグがあると主張しています。特定の難解なシステムで失敗する可能性のある標準的な違反だけでなく、偶然にもほとんどのシステムで失敗する可能性がある「実際の」バグです。

またはintなどのメモリ機能に適した型の代わりに を使用することにも関係しません。たとえば、文字列は「妥当な」サイズです。size_tptrdiff_t

バグが何であるかは本当にわかりません。すべてのポインター演算は問題ありません。を 2 回呼び出しvsnprintfても同じ結果が得られるとは思いもしません。すべての可変引数処理も正しい IMHO です。va_copyは必要ありません ( を使用する呼び出し先の責任ですva_list)。また、x86 では意味がva_copyありません。va_end

誰かが (潜在的な) バグを発見できれば幸いです。

編集:

回答とコメントを確認した後、メモを追加したいと思います。

  • 当然のことながら、変数の状態を監視しながら、デバッガーでのステップバイステップなど、さまざまな入力を使用してコードをビルドして実行しました。最初に自分で試してみずに助けを求めることはありません。問題の兆候、スタック/ヒープの破損などは見られませんでした。また、デバッグ ヒープを有効にしてデバッグ ビルドで実行しました (これはヒープの破損に耐えられません)。
  • 関数は有効なパラメーターで呼び出されると仮定します。つまりpsz、有効なポインター ( と混同しないでください*psz) でszFmtあり、有効な書式指定子であり、すべての可変引数が評価され、書式文字列に対応します。
  • ポインターでの呼び出しfreeNULL、標準に従って問題ありません。
  • 呼び出しvsnprintfは、NULLポインターとサイズ = 0 で問題ありません。結果の文字列の長さを返す必要があります。MS バージョンは、完全に標準に準拠しているわけではありませんが、この特定のケースでは同じことを行います。
  • vsnprintf0 ターミネータを含め、指定されたバッファ サイズを超えません。手段 - それは常にそれを配置するとは限りません。
  • コーディング スタイルは脇に置いておいてください (気に入らない場合は、問題ありません)。
0 投票する
1 に答える
275 参照

c - 共有ライブラリやアプリケーションとの CRT 連携

Windows アプリケーションは CRT を動的にリンクします。アプリケーションがそのコードの一部を実行した後、共有ライブラリをロードします。共有ライブラリは CRT と静的にリンクされます。

私の質問は:

アプリケーションが「CRT 状態」に何らかの変更を加えた場合 (たとえば、一部のファイルで stdout を再度開くなど)、これらの変更は dll コードで有効になりますか?

ありがとうございました

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

c++ - atlbase.h and different versions of VC CRT

I have a C++/CLI project created with Visual Studio 2010 that targets .NET Framework 3.5 and PlatformToolset v90. Initially it requests the VC CRT of version 9.0.21022.8, but if I include atlbase.h header then it requests the VC CRT of version 9.0.30729.6161. Why does this happen? And how can I make it to target 9.0.30729.6161 without including atlbase.h?

I tried to define macroses _BIND_TO_CURRENT_CRT_VERSION=1 and _BIND_TO_CURRENT_VCLIBS_VERSION=1 but this didn't help.