問題タブ [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.

0 投票する
4 に答える
1926 参照

delphi - 複雑なアプリケーションをC++Builder 2007から2010にアップグレードするには、何を知っておく必要がありますか?

私の会社のメインアプリケーションは主にC++で書かれています(いくつかのDelphiコードとコンポーネントを使用)。RAD Studio 2007から2010にアップグレードして、次のリリースに向けて約1週間で開始します。このアップグレードをスムーズに進めるために知っておくべきことは何ですか?

私がこれまで考えてきたポイントは次のとおりです。

  • Unicode。これは本当に複雑に見えます。私たちのアプリには、std::string-sとAnsiString-sの恐ろしい組み合わせが含まれています。これについては、「wstringはUnicodeStringで可能なすべてのものを保持できるので、検索/置換を行うだけでよいか」、「すべてのC ++文字列タイプを完全に避けてUnicodeStringを使用する必要があるか」、「できますか」など、多くの質問があります。既存の.HPPsイベントハンドラーメソッドのプロトタイプはコンパイラーによってAnsiStringに変換されましたが、すべてのイベントハンドラーを文字列を使用するように変更します。 Unicode文字列」など。これに関する洞察をいただければ幸いです。

    下位互換性も必要です。私たちのアプリは、現在文字列をバイトの配列として格納している独自のバイナリタプル形式を使用しています。これをアップグレードして古いファイルを読み取り、おそらく新しいUnicode文字列も書き込む必要があります。バイナリ形式に埋め込まれたUnicode文字列を処理するにはどうすればよいですか?UnicodeStringをバイトの配列に向けることができる一般的な方法はありますか?それは元々ANSIバイトまたはUnicodeとして記述されていて、それらが何であるかを理解しますか?

  • サードパーティのコンポーネント。主にSpTBXを使用しており、互換性があるようです。

  • プロジェクトのアップグレード。Codegearフォーラムの標準的なアドバイスは、アップグレード時にすべてのプロジェクトファイルを手動で再作成することのようです。これは非常に多くの作業です(メインアプリの7つのプロジェクト(主にlibs)に加えて、半ダースのDLL、多くのファイル)。これを自動化する方法はありますか?

  • リンカーはどのように見えますか?リンカがランダムにクラッシュしたり、リソースが不足したりすることで、従来は多くの問題が発生していましたが、2007年には大幅に改善されました。これが、メインアプリケーションが複数のライブラリに分割される理由の1つです。リンカはできません(うまくいけば、「できませんでした。しかし、今はできますか?)それ以外の方法で処理できます。

  • 新しいタイプライブラリエディタとフォーマットがあることを知っています(IDL、つまりテキストを格納し、TLBを動的に生成しますか?)これは、TLBを使用した既存のCOMプロジェクトのアップグレードをどの程度うまく処理しますか?C++アプリケーションに組み込まれているDelphiコードとTLBがあります。

  • 他に考慮すべき、または知っておくべきことはありますか?

見つけた:

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

c++builder-2010 - バッファを転送するにはどうすればよいですか? TTCpServer/TTcpClient

ある PC から別の PC にファイルを送信するプログラムを作成しています。を使用して送信しようとしていますchar* bufferが、問題が発生しています。バッファを送信すると思いますが、結果はサイズが0キロバイトのファイルです。バッファをファイルに書き込んでいないのではないかと思いますが、確かなことはわかりません。私のバッファ データは *bmp ファイルからのものです。ここでほぼ同じことについて別の質問を見つけましたが、もっと説明が必要です。

私は C++ Builder 2010 を使用していますが、そのチュートリアルを見つけるのは困難です。便利なさまざまなコンポーネントと機能があります。

コード:


クライアント:

サーバー:

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

c++builder - TCP ソケットの異常切断と書き込みタイムアウト

できるだけ短い言葉で問題を説明しようと思います。C++ ビルダー 2010 を使用しています。

TIdTCPServer を使用して、接続されているクライアントのリストに音声パケットを送信しています。クライアントが異常に切断されるまで、すべて正常に機能します。たとえば、電源障害などです。接続されているクライアントのイーサネット接続を切断することで、同様の切断を再現できます。

これでソケットが切断されましたが、サーバー側ではまだ検出されていないため、サーバーは引き続きそのクライアントにもデータを送信しようとします。

しかし、サーバーがその切断されたクライアントにデータを書き込もうとすると...... Write() または WriteLn() は、書き込みを試みる際にそこにハングアップし、ある種の書き込みタイムアウトを待っているようです。これにより、ホール パケットの配布プロセスが停止し、その結果、他のすべてのクライアントへのデータ送信に遅延が生じます。数秒後、「Socket Connection Closed」例外が発生し、データ フローが続行されます。

ここにコードがあります

わかりました私はすでにn秒間非アクティブの後にソケットを切断するキープアライブメカニズムを持っています。しかし、ご想像のとおり、このブロードキャスト ループはほぼ常に実行されているため、このメカニズムはこのブロードキャスト ループと正確に同期できません。

それで、iohandlerなどを介して指定できる書き込みタイムアウトはありますか?「切断された tcp ソケットの検出」に関する多くのスレッドを見てきましたが、私の問題は少し異なります。書き込み試行中に数秒間そのハングアップを回避する必要があります。

解決策はありますか?

または、そのようなデータブロードキャストに別のメカニズムを使用することを検討する必要がありますか?たとえば、ブロードキャストループはデータパケットをある種の FIFO バッファーに入れ、クライアントスレッドは利用可能なデータを継続的にチェックし、それを選択して自分自身に配信しますか? このようにして、1 つのスレッドがハングしても、分散スレッド全体を停止/遅延させることはありません。

アイデアはありますか?お時間をいただきありがとうございます。

よろしく

ジャム

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

c++builder - この c++ Builder 2010 スタック トレースで失われる

C++ Builder 2010 プロジェクトで EAccessViolation Exception を下回っています。
StackTrace にプロジェクト ファイルが表示されません。エラーの場所を見つけるにはどうすればよいですか? このアプリケーションは、TIdTCPServer コンポーネントを使用します。

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

c++builder - C++Builder 2010 Professional での UML モデリング

C++Builder 2010 の Pro バージョンでいくつかの基本的なクラス ダイアグラム UML モデルを作成したいと考えています。ソース コードの UML モデル ビュー」と表示され、その表の「プロフェッショナル」列にチェックが入っています。

それでも、既存のプロジェクトを開いて View | View を実行すると、モデル ビュー、モデル ビュー ウィンドウには何もありません。私が見つけた唯一の図は、C++ クラス エクスプローラーの [グラフ] タブにあります。私自身はこれを UML ダイアグラムとは呼びませんが、エンバカデロが言及しているのはそれですか?

編集: Pro には実際にモデリングがサポートされていることがわかりました。どういうわけか、私が開いていたプロジェクトでオフになっていました。プロジェクト グループに別のプロジェクトを追加すると、[モデル ビュー] タブをクリックしたときに、IDE でモデリング サポートを有効にするよう提案されました。その後、そのプロジェクトにクラス図を追加できましたが、プロジェクトの既存のオブジェクトを図にインポートする方法をまだ探しています。

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

rtti - TRttiMethod::呼び出しの使用

C++Builder 2010 で TRttiMethod クラスの Invoke メソッドを使用する方法を教えてください。

これは私のコードです

Show には引数がなく、__published です。実行すると、「パラメータ数が一致しません」というメッセージとともに EInvocationError が返されます。

誰かが Invoke の使用を実証できますか? 呼び出されたメソッドに引数がない場合と引数がある場合の両方。

ありがとう

ジョセップ

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

c++ - uccapi.dll COM インターフェイス C++ へのアクセスに関する問題

Microsoft ユニファイド コミュニケーション クライアント API を含むプロジェクトに取り組んでいます。uccapi.dll。Visual Studio ではなく、Codegear C++Builder 2010 も使用しています。dll を regsvr32 に登録し、タイプ ライブラリとして C++Builder 2010 にインポートした後、uccapi_tlb ファイルと uccapi_ocx ファイルが生成されました。これらを新しいプロジェクトにインポートしたとき、Office Communication サーバーにサインインできる Office Communicator クライアントを作成するためのmsdn ガイドラインに従おうとしています。

この点に関して、2 つの質問があります。

  • ocx を通じて利用可能になった com インターフェイスにアクセスする正しい方法は何ですか?

これまでに、アクセス ポイントを作成するいくつかの方法を見つけました。

最初の3つはうまく機能しているようです。後者は私に Assertion failed: intf!=0 error with 0×40000015 exception を与えます。上位 3 つのメソッドのいずれかを使用して、メソッドにアクセスし、プラットフォームインターフェイスを初期化できます。

ただし、 IUccContext 、 IUccUriManagerIUccUriなどの他のインターフェイスにアクセスするために同じ戦術を試してみると、すべて _tlb.h ファイルで定義された clsid があり、最初の 2 つで「クラスが登録されていません」というエラーが発生します。ケース、または 3 番目のケースの hresult の失敗。それが私の次の質問につながります。

  • ole-viewer を使用すると、すべてのインターフェイスが適切に登録されます。dll を登録するときに、dll 内のすべての共同作成可能なクラスが登録されないのはなぜですか? そして、彼らが同じように行動しない理由は何でしょうか?

UCCAPILib_tlb.h からの Edit1:

0 投票する
3 に答える
4382 参照

python - Python を C++ Builder / Delphi 2010 アプリケーションに埋め込むにはどうすればよいですか?

ユーザーがアプリケーション環境内で Python スクリプトを実行できるようにしたり、内部 (C++ で実装された) オブジェクトにアクセスしたりできるようにするために、アプリケーションに Python を埋め込む実験に興味があります。私がやっている。

Embedding Python in Another Applicationを読みましたが、これはクラスやオブジェクトではなく、C API とフラット C 関数についてのみ話しているようで (何かを見逃していない限り)、その「Embedding Python in C++」セクションは 2 文しかありません。 . ただし、boost::python の使用方法にも出くわしましたが、これは優れているようです。

問題が 1 つあります。boost::pythonは C++ Builder 2010 でサポートされていません

したがって、これを考えると、C++ Builder 2010 でコンパイルされた C++ アプリケーションに Python を埋め込むための最良のアプローチは何であり、どの手法が最適かを使用して、どのようにクラスとオブジェクトを公開/統合して、Python コーダーがオブジェクトにアクセスできるようにしますか?プログラムの内部指向? 標準的なアプローチを見逃していませんか? 内部クラスまたはインスタンス化されたオブジェクトをオブジェクトとして Python に公開するのは簡単ですか、それとも API は真に C スタイルまたはフラット / 非 OO ですか。

注: 私は実際に、C++ Builder と Delphi の両方を含む RAD Studio を使用しています。ある種の Delphi 固有のバインディングを利用することは可能かもしれませんが、私が遭遇したものは6 ~ 7 年前のもの、または新しいもの (Python 2.6)ですが、ドキュメントがないようで「とにかくこれらの [sic] コメントを読んだ人はいますか? このプロジェクトに取り組んでいる人はいますか?これは励みにはなりません。ただし、特に組み合わせた D + CB アプリで動作する可能性が高いと思われる場合は、Delphi 固有の回答を自由に含めてください。完璧でなくても、すべての回答に感謝します。調査はできます。どこへ行くべきかについての指針が必要なだけです。ただし、VCL 派生オブジェクトの使用には独自の制限があるため、ネイティブ C++ ソリューションがおそらく理想的です。

ご意見ありがとうございます。

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

c++ - GetFileSizeExはファイルハンドルを破損します

現在、GetFileSizeExを使用して、ログファイルに書き込む前にログファイルのサイズを追跡しています。スペースには限りがあり、100メガバイトを超えるファイルを作成しようとすると、データのログ記録が停止します。問題は、何らかの理由でGetFileSizeExが使用しているファイルハンドルを破損することです。

hFileHandleは通常の値(00000EB8)から????になります Radstudioのデバッガーで。

代わりにGetFileSize関数を使用して、これを解決しました。

ただし、拡張されていない関数は使用したくありません。他のプロセスがロックされていないことを確認するためにファイルを削除しましたが、ファイルの作成時に問題が発生します。このエラーはビルダー6では発生せず、RadStudio2010でのみ発生することに注意してください。

お手伝いありがとう。

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

compilation - Crypto++をC++Builder2010に統合する方法/[ILINK32エラー]

私はC++Builder 2010を介して次の(例の)コードをコンパイルしようとしていました:

http://swarmapps.wordpress.com/2009/11/24/a-simplification-wrapper-for-the-crypto-library/

http://pastebin.com/f6bd13d59 / example.cpp)

http://pastebin.com/f2fc53f83 / BasicCryptoPPWrap.h)

コンパイラエラーはありませんでしたが、リンクに失敗しました。

[ILINK32エラー]エラー:未解決の外部'CryptoPP :: SimpleKeyingInterface :: SetKey(const unsigned char *、unsigned int、CryptoPP :: NameValuePairs&)'がE:\ TEST \ DEBUG\FILE1.OBJから参照されています

この問題を解決するにはどうすればよいですか?