問題タブ [c++builder-6]
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++ - ADOTable は、ポストの前に行の更新をキャンセルします
ADOConnection を使用してアプリケーション (C++ Builder 6) に接続されたリモート データベース mysql と、データが表示される DBGrid (ADOConnection-ADOTable-Dataset-DBGrid) があります。デフォルトでは ADOTable は編集できません。「編集」ボタンをクリックして、「readonly = false」と書き込み、データを編集します。
行を編集した後 (たとえば、カーソルが上の行に移動した場合)、ユーザーにプロンプトを表示し (「変更を保存しますか? Y / N」)、「いいえ」を選択すると、変更を元に戻す必要があります。ご要望に応じて問題ありません。問題は、変更を元に戻す方法です (できればクライアント、つまり ADOTable または DBGrid)。
c++ - VCL の Application.DispatcherUnhandledException
WPF(.net) では、次のコードを使用して予期しない例外を処理し、プログラムを適切に終了できます。
このようなものは VCL でも利用できますか? それとも標準の C++ でさえありますか?
c++ - タイプがデストラクタで完全修飾されているにもかかわらず、std::auto_ptr でクラッシュしてリークする
C++を読みました: auto_ptr + 前方宣言? とその答え、特に受け入れられたものと、auto_ptr と前方宣言されたクラスを組み合わせるときの落とし穴を認識しています。しかし、この Q&A (およびチェックした他のすべてのauto_ptr タグ付きの質問)でカバーされていないように見える同じパターンで実行時の問題が発生しています。
Outer
のようなクラス[1]を破棄すると、アクセス違反が発生することがあります。
cpp ファイルにコンストラクタとデストラクタを実装していますが、そこにInner
型の定義が存在します。
説明されている問題は、次の場合に消えます。
- または
Inner.h
内に含めるOuter.h
- 明示的に呼び出す
inner.reset()
私は C++-Builder 6 でのみコンパイルされるレガシー コードstd::auto_ptr
に取り組んでおり、コンパイラがサポートしているように見える唯一の smart_ptr 実装であるため、これに固執する必要があります。 C++11 による)。
私の質問: ここで何が間違っているのでしょうか、それとも BCB6 [2]のよく知られたバグでしょうか?
追加の注意Herb Sutter の記事 Using auto_ptr Effectivelyを読んで、不完全な型で auto_ptr を使用しても安全だと思っていました。したがって、上で説明した問題は非常に紛らわしい経験です。
- [1]この例は、auto_ptr 使用の正式な構造を説明するために省略されています。
- [2] Borland C++ 5.6.4、および C++-Builder 6 (upd4) に同梱されている STL
c++ - MessageBox "プログラムの異常終了" によりアプリケーションが実行されたままになる
...すこし。この非常に単純な例が示すように、
ごくまれに (これまでに報告されたのは 1 回だけ)、私のアプリケーションの 1 つがこのようにクラッシュすることがあります。不特定の例外が発生したときに通常どおり終了したい。私の戦略は、問題を (低レベルで) ログに記録してから終了することです。アプリケーションはサブシステムの一部であり、問題が検出された場合は (再) 起動したいと考えています。C++-Builder 6 で構築され、Windows (XP...7、8 も) で動作します。abort()
おそらくエラーメッセージの原因であることがわかりました。アプリケーションには GUI があります。そのため、単に (ブロック解除) 出力をstderr
.
そして、メッセージ ボックスがユーザーに受け入れられない限り、私のアプリケーションは明らかに実行を続けます。たとえば、タイマー (上記の例ではライフビートが増加します) やプロセス間メッセージを処理し、問題を完全に認識しません。
C++ プログラムをクラッシュさせる最も簡単な方法は何ですか?に対するいくつかの回答を読んだ後、およびraise(SIGABRT) メソッドと abort() メソッドの違い、次のことを試しました
orが呼び出された場合でも、アプリケーションを適切に終了させることができます。(また、Windows が「問題の解決策を検索」しないようにしたいと考えています。)abort()
raise(SIGABRT)
これ(中止のシグナルハンドラを登録し、そこで終了を呼び出す)はあなたの観点から信頼できますか?...または少なくとも構築できるものはありますか?
c++ - なぜ予期しない関数が呼び出されないのですか?
次のコードが予期しないハンドラーを呼び出すことを期待していますが、代わりに終了ハンドラーが呼び出されます。
C++ Builder 6 開発者ガイドでは、カスタムの予期しないハンドラーを 経由でインストールすることを明示的に推奨していますset_unexpected()
。何が間違っているのでしょうか、それとも単に C++-Builder 6 のバグなのでしょうか?