問題タブ [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.
c++ - _beginthreadex に 64 ビットのスレッド識別子を提供する方法
一部のコードを 64 ビットに移植しようとしていますが、スレッドアドレス識別子_beginthreadex
が32 ビットであり、関数から64 ビットアドレスunsigned int
識別子を送受信できないようです。
MSDN のドキュメントを確認しましたが、関数の 64 ビット バージョンは見つかりませんでした。間違ったヘッダーやプロセッサごとのフラグを含めているのでしょうか、それとも 64 ビットアドレス識別子を持つスレッドを作成する別の方法がありますか?
アップデート
ドキュメントには、thrdaddr
パラメーターが 32 ビットであると記載されています。
スレダドル
windows - Windows アカウント間の異なるランタイム
すべてではなく一部のコンピューターで Windows サービスを実行する際に問題があります。
VS2008 で書かれており、VC ランタイムが必要です。最初に VC ランタイムをインストールしてから、管理者がサービスをインストールしました。
サービス ログオン ユーザーは、管理者グループの libwb です。その後、一部のコンピューターでサービスを実行できないことがわかりました。それらにはすべてユーザー libwb があり、パスワードは正しいです。
次に、サービスのログオン ユーザーを SYSTEM に変更しましたが、そのままです。
最後に、サービスのログオン ユーザーを管理者に変更しました。出来た。
それで、何が違うのですか?
サービスにはメイン関数のログがありますが、失敗したときのログファイルには何もありません。そのため、liwb または SYSTEM を使用してサービスを実行すると、VC ランタイムが見つからなかったと思います。そして、libwb、SYSTEM、Administrator の実行時間は異なると思います。
知らなかったけどなんで?この問題に関するリソースはありますか?
certificate - GoDaddy 証明書を使用して AppHarbor 内で証明書を作成する方法
GoDaddy からワイルドカード証明書を購入しました。この証明書を AppHarbor の Web サイトに関連付けたいと考えています。
AppHarbor では、PFX 証明書のみをアップロードできます。では、.CRT を .PFX に変換するにはどうすればよいでしょうか。
c - _invalid_parameter はリリース ビルドで有用な情報を取得しません
_set_invalid_parameter_handler を使用して、CRT 関数が無効なパラメーターを取得したときのプログラムの既定の動作をオーバーライドしています。これは、0xc0000417 (STATUS_INVALID_CRUNTIME_PARAMETER) でクラッシュします。
これは私のハンドラです:
情報をログに記録し、エラー レポートを送信したい。デバッグ ビルドではパラメーターを使用して有用な情報を取得できますが、リリース ビルドではすべてのパラメーターが NULL であり、あまり役に立ちません。リリース ビルドにも有用な情報を追加する方法はありますか?
visual-studio - プロジェクトのデバッグおよびリリース構成で使用するサードパーティ ライブラリを適切にビルドするにはどうすればよいですか?
異なるバージョンの MSVC でいくつかのプロジェクトで使用するサード パーティ製ライブラリをビルドする必要がある場合、通常はすべてのMSVC バージョンとデバッグ構成とリリース構成の両方に対してビルドします。それがブーストの役割であり、私たちのチームがこれまでずっとやってきたことです。
しかし、私はまだ理解していません.どうしてこのライブラリをビルドできなかったのですか...何でも. 必要なのは、関数プロトタイプとオブジェクト コードだけですよね? CRT を静的にリンクしているので、外部依存関係はありません。しかし、MSVC8 の Release でビルドされたライブラリを MSVC10 の Debug のプロジェクトにリンクしようとすると、この迷惑な「定義済み」リンカー エラーが発生します。
しかし、なぜ?このすべての関数を lib 内に「カプセル化」し、それらをエクスポートせずにプロジェクトが lib から必要なものだけを取得できるようにすることはできますか? すべてのプロジェクトでリンクできる libpng と zlib のプリコンパイル済みバージョンを使用できるのはなぜですか? はい、MSVC を使用してビルドされていないと思いますが、CRT の同じ機能を使用しています。誰かが詳細に説明したり、この問題の賢明な説明へのリンクを共有したりできますか?
c++ - なぜ /MD がコンパイラのオプションなのですか? リンカじゃない?
コンパイル段階で RTL のタイプを選択しなければならない理由がよくわかりません。
たとえば、オプション /MD を使用して 1 つのスタティック ライブラリ A.lib を作成しました。次に、オプション /MT を使用して 2 番目の静的ライブラリ B.lib を作成しました。
A.lib と B.lib を C.exe にリンクしようとすると、リンカー エラーが発生します。
しかし、コンパイル段階 (A.lib および B.lib の作成) では、c または c++ ランタイムからシンボルを解決する理由はありません。
c - vsnprintfについて(インタビュー)
インタビュー中に、(とりわけ) 次の機能を実装するように要求されました。
に似てsprintf
いますが、既に割り当てられているストレージの代わりに、関数がそれ自体を割り当て、*psz
変数に返す必要があることを除きます。さらに、*psz
すでに割り当てられている (ヒープ上にある) 文字列を指している可能性があり、これはフォーマット中に使用される可能性があります。当然、この文字列は適切な手段で解放する必要があります。
戻り値は、新しく作成された文字列の長さ、またはエラーの場合は負になります。
これは私の実装です:
質問の作成者は、この実装にはバグがあると主張しています。特定の難解なシステムで失敗する可能性のある標準的な違反だけでなく、偶然にもほとんどのシステムで失敗する可能性がある「実際の」バグです。
またはint
などのメモリ機能に適した型の代わりに を使用することにも関係しません。たとえば、文字列は「妥当な」サイズです。size_t
ptrdiff_t
バグが何であるかは本当にわかりません。すべてのポインター演算は問題ありません。を 2 回呼び出しvsnprintf
ても同じ結果が得られるとは思いもしません。すべての可変引数処理も正しい IMHO です。va_copy
は必要ありません ( を使用する呼び出し先の責任ですva_list
)。また、x86 では意味がva_copy
ありません。va_end
誰かが (潜在的な) バグを発見できれば幸いです。
編集:
回答とコメントを確認した後、メモを追加したいと思います。
- 当然のことながら、変数の状態を監視しながら、デバッガーでのステップバイステップなど、さまざまな入力を使用してコードをビルドして実行しました。最初に自分で試してみずに助けを求めることはありません。問題の兆候、スタック/ヒープの破損などは見られませんでした。また、デバッグ ヒープを有効にしてデバッグ ビルドで実行しました (これはヒープの破損に耐えられません)。
- 関数は有効なパラメーターで呼び出されると仮定します。つまり
psz
、有効なポインター ( と混同しないでください*psz
) でszFmt
あり、有効な書式指定子であり、すべての可変引数が評価され、書式文字列に対応します。 - ポインターでの呼び出し
free
はNULL
、標準に従って問題ありません。 - 呼び出し
vsnprintf
は、NULL
ポインターとサイズ = 0 で問題ありません。結果の文字列の長さを返す必要があります。MS バージョンは、完全に標準に準拠しているわけではありませんが、この特定のケースでは同じことを行います。 vsnprintf
0 ターミネータを含め、指定されたバッファ サイズを超えません。手段 - それは常にそれを配置するとは限りません。- コーディング スタイルは脇に置いておいてください (気に入らない場合は、問題ありません)。
c - 共有ライブラリやアプリケーションとの CRT 連携
Windows アプリケーションは CRT を動的にリンクします。アプリケーションがそのコードの一部を実行した後、共有ライブラリをロードします。共有ライブラリは CRT と静的にリンクされます。
私の質問は:
アプリケーションが「CRT 状態」に何らかの変更を加えた場合 (たとえば、一部のファイルで stdout を再度開くなど)、これらの変更は dll コードで有効になりますか?
ありがとうございました
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.