問題タブ [c++builder-2010]
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++builder - バルーン ヒントを作成するにはどうすればよいですか?
アプリでバルーンタイプのUIを使用して、特定の状況で特定のアクションを実行する必要があるという情報をユーザーに表示できるようにするためのヒントを作成しようとしていますが、フォーラムで見たいくつかのコードを吸っています。私が見つけたバルーン ヒントの一例は、次のサイトhttp://www.tek-tips.com/viewthread.cfm?qid=1611641にあります。C++ Builder 2009 IDE で作成され、C builder 2010 IDE RS を使用してコンパイルしようとしたと思いますが、バルーン ヒントを取得できませんでした。まず、コンパイルすると、次の行で停止します。
GetClientRect(hWnd, &ti.rect);
次に、GetWindowRect に変更しましGetClientRect
たヒントは表示されますが、ツールヒントは表示されません。
さらに、リンクを提供したコードを提示しました。
次に、ビルダー 2010 IDE で動作させる方法を尋ねていますか??? 2つのパラメーターを提供するようなWindows API funcを使用して2009 IDEで機能したのはなぜでしょうか。Windows GetClientRect()
7のCビルダー2010 IDEでコンパイルすると、パラメーターが予期されないと言われました...
c++ - Builder 2010 の「アクセスできません」エラー
プロジェクトを C++ Builder 6 から C++ Builder 2010 に移行しようとしています。プロジェクトには TChart があります。BCB 2010 でコンパイルすると、次のようなエラーが多数発生しE2247 '_fastcall TSeriesPointer::ChangeStyle(TSeriesPointerStyle)' is not accessible
ます。それは何でしょうか?
失敗したコードを含む文字列があります:
Series8 -- TSeries タイプのオブジェクトです。InpStr -- UnicodeString オブジェクトです。
c++builder - C ++Builder2010の奇妙なアクセス違反
C ++Builder2010を使用して構築された既存のより大きな製品の一部となるプログラムがあります。
小さいプログラムは(まだ)C++Builderに依存していません。MS Visual Studioでは正常に動作しますが、C ++ Builderを使用すると、奇妙なアクセス違反が発生します。
これを説明させてください。
コードとコンパイラの設定に応じて、アクセス違反が発生する場合と発生しない場合があります。アクセス違反は再現可能です。プログラムがビルドされると、アクセス違反は発生しないか、常に同じ場所で発生します。プログラムを同じ設定で再構築すると、同じ動作を示します。(私はそれについて本当にうれしいです)。
アクセス違反は、削除演算子が呼び出された場所で発生します。これは、(コンパイラの設定と正確なコードに応じて)特定のデストラクタ内(独自のクラスのデストラクタを含む)およびstd::stringのデストラクタ内で発生する可能性があります。
次のことにより、アクセス違反の可能性が低くなります。
- (「リリース」ではなく)「デバッグ」設定でビルドします。
- コンパイラの最適化はありません。
- コンパイラスイッチ「遅い例外エピローグ」。
- 動的ではなく静的RTL。
- BorlandのExceptionクラスではなく、std::exceptionから例外を取得します。
- あまり「複雑でない」式を使用します(たとえば、「throw SomeException(string( "...")+」の代わりに「string s = "..." + "..."; throw SomeException(s);」を使用します。 。");")
- デストラクタを使用した自動変数の代わりに、手動クリーンアップを使用してtry...__finallyを使用します。
- VCLWindowsアプリケーションの代わりに小さなコンソールアプリケーションを使用してください。
このプログラムは、例外、STL、移動コンストラクターなどを含むいくつかのC ++機能を利用し、もちろんヒープを使用します。
私はすでにいくつかのツールを試しましたが、どれも問題を報告しませんでした:
- ボーランドのCodeGuard。
- Microsoftアプリケーション検証ツール。
- pageheap/gflags。
- すでに述べたように、MSVisualStudioでビルドする場合はまったく問題ありません。
プリコンパイル済みヘッダーとインクリメンタルリンク(どちらもエラーが発生しやすいようです)の使用は無効になっています。
C ++ Builderコンパイラ(「すべての警告を有効にする」)もVisual Studio(/ W4)のコンパイラも、この問題に関連する可能性のある警告を生成しません。
別のバージョンのC++Builderにアクセスできません。
プログラムはより大きな製品の一部になるため、別のコンパイラに切り替えるオプションはなく、アクセス違反が発生しなくなるまでコンパイラ設定を調整するオプションもありません。(これが本当にコンパイラのバグである場合、バグが再び現れる可能性があるのではないかと心配しています。)
これをまとめると、これはコンパイラのバグに関連するヒープの破損が原因である可能性があると思います。ただし、qc.embarcadero.comでバグを見つけることができませんでした。さらに、これは、例外がスローされたときにスタックの巻き戻し時に実行されるクリーンアップコードに関連していると推測しています。しかし、まあ、それはばかげたコードのバグにすぎないのかもしれません。
現在、どうすればいいのかわかりません。助けていただければ幸いです。前もって感謝します!
c++builder - フォームのコンポーネントを破棄する方法
Show
イベントのフォームにコンポーネントを動的に作成しています。次回の OnShow イベントではコンポーネントを再度作成する必要があるため、Close イベントですべてのコンポーネントを破棄する必要があります。ここでは、データ行の数に応じてコンポーネントの数が変更されます。私は使用しています
しかし、次に呼び出すと、アクセス違反が表示されるか、コンポーネントが既に存在するというメッセージが表示されます。コンポーネントがまったく破棄されなかったからです。
フォームとそのコンポーネントを正しく破棄する方法は?
c++ - Indy compsを使用して、ネットワーク内のリモートホストの状態を確認します
I have client server application that works with Firebird server. Everytime when clients connect to the server they(client apps) don't check if there is a network connection to the server so at this time my application sometimes freezes when the server computer is switched off or service has stopped, so first of all I need to check connection if remote host is switched on or at some port anything listening....
Before establishing the connection I need to check it and make sure server and service is running using Indy components.
Any ideas? also I can use IcmpClient to ping remote host and then establish connection but which is the most optimal way ?
c++ - C++ Builder で boost::recursive_mutex を静的にコンパイルすることは可能ですか?
boost::recursive_mutex
C++ Builder 2010でboost_thread-bcb-mt-1_39.dllboost::lock_guard
を使用しているようです。静的バージョン-boost_thread-bcb-mt-1_39.libもあります。
私のコードは次のようなものです:
ただし、コンパイル オプションをReleaseに設定し、Dynamic RTL オプションをFalseに設定すると、dll ブースト ライブラリと静的ランタイムを混在させることは本当に悪い考えです... . Dynamic RTL をTrueに戻すとコンパイルが行われますが、追加の DLL ( cc32100mt.dllおよびboost_thread-bcb-mt-1_39.dll ) が必要です。
単一のexeで静的にコンパイルする方法はありますか? やはり、LIBファイルが提供されているので、できるはずです。このバージョンの C++ Builder または Boost に問題がありますか?
c++ - RADStudio 2010 で「宣言の使用」が機能しない
VCL クラスから新しいクラスを派生させていTStream
ます。
TStream
Seek の次の 2 つのバリアントを宣言します。
しかし、クラスをコンパイルすると、次の W8022 警告が表示されます:-
確かに Using 宣言はそれを修正する必要がありますか?
この質問を軌道に戻すために、私は TStream::seek の 2 つのバージョンが相互に関連する方法を認識しており、派生クラスによって公開された継承された Seek(int,int) メソッドを取得しようとしています。なぜ私のusing
宣言はそれをしていないのですか?
c++builder - borland c++builderのフォーム間でデータを転送する
私はc++ビルダーで2つのフォームを設計しました:
- TfrmMain
- TfrmChooseName
TfrmMainクラスには、btnNextという名前のボタンがあります。btnNextをクリックすると、以下のコードが実行され、新しいTfrmChooseNameが作成されます。
また、TfrmMainには、txtInputという名前のTEditコントロールがあります。
TfrmChooseNameのcostructorで、txtInputのテキストを取得し、フォームのキャプションとして設定したいのですが、アクセスボリュームエラーが発生しました。
私も両方のクラスを友達にしました!
c++builder - 別のフォームが機能している場合でも、1 つのフォームを更新し続ける
作業中に他のフォームの上に置きたい小さなフォームを作成しました。基本的には、「読み込み中...お待ちください」という小さな通知のようなものです。アニメーション化されたTGIFImageが含まれています。問題は、別のフォームが一生懸命働いているときに、このフォームのアニメーションと更新が途切れることです。おそらく、それらは同じスレッドで実行されているためですか?この小さなフォームを常に適切に更新するための迅速かつ簡単な方法はありますか? おそらく、それが独自のスレッドで処理されていることを確認する簡単な方法でしょうか?
map - マップのキーとしてAnsiStringを使用する場合の奇妙な問題
私は地図を持っています
map<AnsiString, Foo*>
マップで値を検索しようとすると、から受け取った文字列を使用しTMemoryStream
て関数に送信しますFoo* GetFoo(AnsiString)
。関数はイテレータを作成し、見つかったオブジェクトを返します。これはほとんどの場合正常に機能しますが、1つの関数では値を返しません。
ルックアップに使用するAnsiStringがFooID = FooID.SetLength(FooID.Length() - 1);
どこにあるかを実行すると、それが機能し、正しい結果が返されます。FooID
ストリームにゴミがあるのではないかと思っていたのですが、箱から出してすぐに使える場所とハックが必要な場所で使われているAnsiStringsを見ると同じです!?
これは、IDEのデバッグ値インスペクターによるものです...したがって、そこではいくつかのトリックが行われている可能性があります。しかし、いったい何がこれを引き起こしているのでしょうか?
アップデート:
中古の実装を見つけましたoperator>>
。
ステップスルーすると、受信した文字列が正しく処理されるようです。WideString
しかし、問題が珍しくないということを聞いたことを思い出しているようです:P
更新2:
返される文字列の長さが6文字に末尾を加えたものであるインスタンスを実際に見つけました\0
が、サイズは7に設定されています。したがって、間違ったサイズを提供するため、その文字列を送信するアプリケーションに解決策があると思います。