問題タブ [c++builder-2009]
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.
dll - DLL で TPageControl コンテンツが更新されない
C++ Builder 2009 には、TFrame
サブクラスを EXE メイン プログラムにエクスポートする DLL があります。サブクラスにTPageControl
オブジェクトがあります。TFrame
を EXEにTFrame
ロードして に表示するとTForm
、 のタブを変更してもTPageControl
の内容はTPageControl
同じままですが、アクティブなタブが更新されます。
TPageControl
EXE メイン プログラムで直接使用する場合、この種の問題に遭遇したことはありません。DLL および VCL の制限と何か関係がありますか?
c++ - バッファー サイズのない vswprintf() は、EOF ではなく小さなバッファーでクラッシュします。バッファサイズを渡す方法
Borland C++ Builder 2009 の使用
RAD Studio のヘルプ (F1) ごとに vswprintf を使用します。
これまで、私は常に大きなバッファを提供してきましたwchar_t OutputStr[1000]
が、問題はありませんでした。テストとして、改善アクションを実行したいので、小さなバッファーを試してみたwchar_t OutputStr[12]
ところ、プログラムが完全にクラッシュすることに気付きました。さえtry{}catch(...){}
、それをキャッチしません。Codeguard は amemcpy()
が失敗したと報告していますが、これは内部実装のようです。EOF
代わりに as 戻り値を期待していました。
オンラインで検索するvswprintf
と、c++ バリアントは入力としてバッファ サイズを使用することがわかりますが、コンパイラにそのバリアントを使用するよう説得できないようです。BCB2009 を使用してそれを強制する方法はありますか?
演習の要点は、おそらく 1 つまたは 2 つの異常な状況でバッファーが小さすぎる場合のフォールバック シナリオを実装して、関数により多くのメモリを割り当てて再試行できるようにすることでした。しかし、このメカニズムはまったく機能していないようです。
必要なバイト/文字の正確な量をテストする最善の方法がわからない?
bpl - 「vcl.bpi」を BPL プロジェクトに追加する方法
C++ ビルダー 2009 を使用して BPL プロジェクトを作成します。「Requires」リストには、デフォルトで「rtl.bpi」があります。いくつかの VCL フォームを「含む」リストに追加し、BPL プロジェクトをビルドしようとしました。「 XXX.OBJ から参照された未解決の外部 'Forms::TForm::' 」などのリンカ エラーが原因で、ビルドが失敗します。「 Requires」リストに「 vcl.bpi」を追加する必要があることは明らかです。次の手順を実行します。
- 「 Requires 」を右クリックし、「参照の追加」を選択します。
- [追加] ダイアログ --> [必須] タブで、[パッケージ名] テキスト編集で「vcl.bpi」と入力し、[OK] をクリックします。
- 「 File vcl.bpi not found 」というエラー ダイアログが表示されます。
"vcl.bpi" を手動で追加するにはどうすればよいですか?
plugins - .EXE とカスタム .BPL ファイルのみをデプロイする方法は?
プラグインを使って GUI アプリケーションを開発したいと考えています。プラグインには、Plugin-Core ライブラリのベース フォームから継承された VCL フォームが含まれています。メイン アプリケーションは、動的にロードするプラグインを選択してから、表示する Form サブクラスを選択できます。
ユーザー側では、メインの.EXE、Plugin-Core ライブラリ、およびさまざまなモデル用の多くのプラグイン ライブラリをデプロイしたいと考えています。メインの.EXEと Plugin-Core ライブラリを変更せずに、新しいデバイス用の新しいフォームを表示するために、新しいプラグイン ライブラリをユーザーにリリースするか、既存のプラグイン ライブラリを変更することができました。
私が開発した最初のバージョンは DLL アプローチを使用しています。つまり、Plugin-Core ライブラリとプラグインの両方が DLL 形式です。ユーザー側ではすべてがうまくいっています。ただし、開発者側では、Plugin-Core DLL プロジェクトで Base Forms が定義されていないと、プラグイン DLL プロジェクトをリンクできません。これは、基本フォームが実際には各プラグイン DLL プロジェクトで静的にリンクされていることを意味し、いつか基本フォームを変更して Plugin-Core DLL プロジェクトを再構築する場合、すべてのプラグイン DLL プロジェクトを再構築し、プラグイン.DLLを再リリースする必要があります。ユーザーも。
StackOverflow で検索して質問したところ、VCL フォームが DLL の境界を越えて継承できないという制限は、RTTI の競合 (?) によるものであることがわかりました。推奨される解決策は、ライブラリを DLL から BPL 形式に変更することです。これは、私が開発した 2 番目のバージョンです。次の2つを除いて、すべて問題ありません。
プラグイン BPL から動的に読み込まれたフォームは、Windows タスクバーのメインの.EXEから分離されています。それは私が望んだものではありません。解決策は、 .EXEプロジェクトで「ランタイム パッケージを使用してビルド」を有効にしたことです。
.EXEプロジェクトで「Build with runtime packages」を有効にした後、 vcl.bplやrtl.bplなどの他の .BPL をユーザーにリリースする必要があります。これは私が望んでいたものではありません。
上記の 2 つの問題を同時に解決できることを知りたいですか? 私の考えでは、次のようにすれば、2 つの問題の両方を解決できます。
- .EXEプロジェクトで「ランタイム パッケージを使用してビルド」を無効にします。
- すべての.BPLプロジェクトで「ランタイム パッケージを使用してビルド」を有効にします。
このように、.EXEはvcl.bplとrtl.bpl がバンドルされていなくても実行でき、依存ユニットが既にメインの.EXEの一部であるため、プラグイン.BPLを正常にロードできます。私は正しいですか?ただし、[ランタイム パッケージを使用してビルド] チェックボックスは、すべての.BPLプロジェクト オプションで無効になっています。その結果、ソリューションが機能するかどうかを確認する機会がありません。説明が長くなって申し訳ありません。会社のインターネット セキュリティ ポリシーにより、画像を添付できません。
c++ - C++Builder 2009 で文字列を TDateTime に変換する
TDateTime
特定の形式の文字列を C++Builder 2009を使用するように変換しようとしています。
の変換はdt
問題ありませんが、 の変換はdt2
例外をスローします:
「2017.17.10 13:24:33」は有効な日時ではありません
delphi - AllowMultiSelect の TSaveDialog オプションが W10 システムで正しく機能しない
私は、C++ Builder 2009 で構築された、長い間変更されていない古いアプリケーションを持っていますが、それでも問題なく動作します。つまり、..今日TSaveDialog->Options
、Windows 10 システムで意図したとおりに動作しないものがあることに気付きました。夢ではないことを確認するために、古い Windows バージョン (XP を試しました) で同じアプリケーションをテストしたところ、意図したとおりに完全に正常に動作しました。
TSaveDialog
インスタンスは、設計時に次のようにセットアップされOptions
ます 。[ofHideReadOnly,ofAllowMultiSelect,ofEnableSizing]
ofAllowMultiSelect
今日(Windows 10で)それがもう機能しないことに気付きましたか?代わりofOverwritePrompt
に (誤って) 使用されます ! つまり、2 つ以上のファイルを選択できなくなり、既に存在するファイルを選択すると、最初に [名前を付けて保存を確認] ダイアログが表示されます。
Windows 10 システムで、C++ Builder 2009 を使用してデバッグ モードと inspect を使用して再度コンパイルすると、デバッガーは, ,Options
を (まだ) 正しく認識しているように見えますが、問題は解決しません。値が何らかの形で変更されたわけではありませんか?ofHideReadOnly
ofAllowMultiSelect
ofEnableSizing
実行時に試すと:
問題も解決しません。
(実行時または設計時に)削除すると、ofAllowMultiSelect
「名前を付けて保存を確認」が既存のファイルに表示されなくなります(ただし、明らかに複数のファイルを選択することもできません)。
正直に言うと、私はこれに驚いていますか?次に何をすべきかわからない?最新の C++ バージョンをテストするオプションはありませんが、ここでコンパイラがどのように責任を負うのかを理解するのも困難です。
任意のガイダンスをいただければ幸いです。
c++ Builder と Delphi の間で VCL が重複しているため、Delphi タグが追加されました