問題タブ [c++builder-xe4]
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++ - TStringList が新しくなったかどうかを知る方法
Windows7 Professional (32bit) で C++ Builder XE4 を使用しています。
TStringList について質問があります。
私がやりたいことは、TStringList 変数が新しくなったかどうかを知り、Add() メソッドが新しくならない TStringList; にならないようにすることです。
NULL のチェックがうまくいくかもしれないと思ったのですが、うまくいきませんでした。
上記のコードは、「空でない」ダイアログを表示します。
新しく作成された、または新しく作成されていない TStringList をチェックする標準的な方法は何ですか?
c++ - boost::system::error_code::message()がboost::asioソケットでアクセス違反の例外をスローする
ハードウェア デバイスへの少数のソケット接続を確立する必要があるクライアント アプリケーションを実装しています。問題を次の小さなコードサブセットに分解しました
Embarcadero RAD studio XE4 C++ Builder を使用していますが、上記のコードをメイン VCL スレッドで実行すると正常に動作します。複数の接続で実行すると、クラスの複数のインスタンスで上記のコードが実行されます。これはTThread、アクセス違反の問題が発生したときerror_codeです。呼び出しによって変更されると、インスタンスconnectの内部メンバーNULL になるので、呼び出すとアクセス違反が発生します。これは、バックグラウンド スレッドを 1 つだけ実行している場合でも発生します。m_caterror_codemessage()
上記のコードは、使用する必要がある方法で単にスレッドセーフではない可能性がありますか? このコードがバックグラウンド スレッドで実行されない理由を調べてみましたが、何も見つかりませんでした。
私が実行しているブースト バージョンは 1.50 です。これは、RAD Studio で 64 ビット アプリケーションを構築するために使用される統合バージョンであるためです。
マルチスレッド設定 (Embarcadero またはその他) でこの問題に遭遇した人はいますか? もしそうなら、どのように解決しましたか? それとも、このクラスをマルチスレッドで使用するのは安全ではないのでしょうか?
search - C++Builder XE4 で ADO の複数フィールドを検索する
Locate メソッドを使用して TADOTable を検索していますが、複数フィールド検索では機能しません。(TADOTable を直接検索しているため、この場合は SQL には関心がありません)。
次のコードは、単一のフィールドを使用する場合は正常に機能しますが、複数のフィールドでは機能しません!
delphi - ADO エラーの例外処理?
テーブルとクエリを ADO コンポーネントの同等のものに置き換えることで、BDE の使用から ADO に切り替えました。
私は常に次のように try...catch 内でクエリを実行しています。
ADO に切り替えたので、これらの例外 (DBEngineError、DatabaseError) は適用されますか?
投稿を編集して、Delphi 関係者を含めるようにしました。彼らは迅速に対応してくれます。答えが Delphi コードであるかどうかは関係ありません。
c++ - C++ 同期 boost::asio::ip::tcp::socket 接続が閉じていることを検出できません
boost::asio同じコンピューター上で実行される node.js TCP サーバー アプリケーションへの同期 TCP ソケット接続を確立するために使用しています。Embarcadero 統合ブースト バージョン 1.50 を使用する Windows ビルド 64 ビット アプリケーションで Embarcadero RAD studio XE4 を使用しています。
node.js TCP サーバーがシャットダウンする場合を除いて、問題なく動作します。これが発生すると、C++ クライアント アプリケーションはソケットからの読み取り時に切断を検出しません。ただし、ソケットに書き込むと切断が検出されます。
私の現在のコードは、ブーストのドキュメントとSOに関するさまざまな回答を理解しようとした後に作成されました。コードの読み取り部分は次のとおりです(簡潔にするためにエラー コードのチェックは省略しています)。
これは、ループ内の独自のスレッドで実行され、プログラムがシャットダウンされるまで絶えずデータをポーリングするため、優れたシステムではありません。通常read()、データがない場合はソケットで実行しませんが、この場合は実行します。これは、すべてのドキュメントから、ソケットへの読み取りまたは書き込みを実行するときにのみソケットの切断が検出されると思われるためです。問題は、node.js アプリケーションがシャットダウンしたときに、上記のコードが切断をまったく検出しないことです。私が書いている場合はそれを検出します(コードの書き込み部分は、検出のために読み取りと同じboost::asio::error`エラーを使用しています)が、読み取り時には検出しません。
明らかに、利用可能なバイト量よりも大きいバイト量の読み取りを実行することはできません。そうしないと、スレッドがブロックされ、後でスレッド ループで書き込みを実行できなくなります。
エラー状態を検出するための別の特定のブースト エラー コードがありませんか? または、ゼロ長の読み取りに特に問題がありますか。その場合、他に利用できるオプションはありますか?
現在、node.jsサーバーが特定のメッセージをソケットに書き出すようにしています。これは、シャットダウン時に検出され、クライアントエンドを自分で閉じます。ただし、これはちょっとしたハックであり、可能であれば、切断を検出するためのクリーンな方法を希望します。
c++ - TStringGrid OnDrawCell の問題
C++ Buidler XE4 を使用して TStringGrid で Drawcell を使用すると問題が発生します。私のC++コードの一部で、次の行のようにセルにテキストを入れました:
そして、私がこれを行うときのDrawCellイベントで:
tmp は "1" です (ACol = x かつ ARow = y の場合)。コードのどこにも「1.0」を「1」に置き換えていないと確信しています。だから誰かが私に何が起こったのか説明できれば、私はとても優雅になります。
私が実験しているように、うまくいくこともあれば、うまくいかないこともあります(再コンパイルすると)。
C++Builder の下位層 (デルファイのもの) は、TStringGrid の背後にある StringGrid をスワップ (またはそのようなもの) することがありますか?
c++builder - ビルドが完了する前にビルド後のイベントが呼び出される RAD Studio XE4
私は RAD studio XE4 IDE を初めて使用します。プロジェクト オプションのビルド後のイベント コマンド フィールドを使用して、ビルド後に vbs ファイルを実行したかっただけです。
問題は、ファイルがプロジェクトでコンパイルされるたびにvbスクリプトファイルが実行されることですが、予想される動作はプロジェクト全体の完全なビルド後に呼び出される必要があることです。Embarcadero RAD studio 2010でも同じことがうまくいきましたが
以下は、ビルド後のイベント コマンド フィールドに入力したコマンドです。
Embarcadero RAD studio 2010 では、同じフィールドでこのコマンドを使用しました (上記のコマンドは失敗しましたが、正常に動作しています)。
c++ - std::ostringstream は Embarcadero C++ Builder XE4 に対してスレッドセーフですか?
プログラムの終了時に例外をスローするアプリケーションがあります。コードがインスタンスstd::stringsで散らかるのを避けるために使用する数値型を変換するためのヘッダーファイルに次のユーティリティ関数がありますstd::ostringstream
現在、このコードは複数のスレッドから呼び出され、頻繁に呼び出され、ostringstream 実装の奥深くでアクセス違反例外をスローすることがあります。このコードからわかることから、スレッドセーフではない明確な理由はわかりません。
Linux (g++ 4.6.3) 用に特別に開発した他のアプリケーション内で同じ関数を使用していますが、コードがスローされるのを見たことがありません。
標準ライブラリ内のスレッド セーフを想定してはならないことはわかっていますが、私の関数はかなり基本的なものです。私のアプリケーションは 64 ビット アプリケーションとしてビルドされているため、このバージョンの XE4 に同梱されている C++11 コンパイラを使用しています。
上記の関数が安全でない理由があるかどうか、または標準ライブラリの Embarcadero C++ ビルダー XE4 実装にこれを安全でないものにする既知の問題があるかどうか、誰か教えてもらえますか?