質問

私が働いている会社では、すべての GUI を C# で開発していますが、アプリケーション カーネルは主に Delphi 5 で開発され (歴史的な理由から)、多くのコンポーネントは COM+ で作成されています。この非常に特殊な種類のアプリケーションに関連して、次の 2 つの質問があります。

  • Delphi や COM の経験豊富な方、バグのある TLB インターフェイスを扱うための回避策はありますか?バグの一部は次のとおりです。大規模な TLB の編集中に IDE がクラッシュする、メソッド ID が失われる、TLB が破損するなど。ここでは、良い解決策が見つかりませんでした。実際に新しい 2007 バージョンにアップグレードしてみました。しかし、新しい IDE TLB インターフェイスには、以前に見つかったのと同じバグがあります。

  • TLB のバージョンはどのように制御しますか?TLB ファイルはバイナリ形式であるため、競合を解決するのは非常に困難です。インターフェイスの記述を IDL にエクスポートし、CVS にコミットして実行しようとしましたが、Delphi を使用して IDL から TLB を生成する良い方法が見つかりませんでした。さらに、Microsoft が提供する MIDL ツールは、delphi からエクスポートした IDL ファイルを正しく解析できませんでした。

役に立ちましたか?

解決

Delphi 2009 をよく見てみるとよいでしょう。

Delphi 2009 では、バイナリ TLB ファイルのテキストベースの置き換えなど、COM サポートが変更されています。

詳細については、 クリス・ベンセンのブログ.

他のヒント

遠い昔 (CodeGear で働き始める前)、私は IDE が提供する奇妙な Delphi 化 IDL 言語を諦め、独自の IDL を作成し、MS midl を使用してコンパイルしました。これはおおむねうまくいきました。唯一の欠点は、IIRC が、プロパティのゲッターとセッターの自動化インターフェイス (ディスパッチインターフェイス) で dispids (id 属性) が正しいことを確認することでした。tlibimp が期待する不変条件がいくつかありましたが、midl は保証しませんでした。

ただし、Delphi 2009 では、midl 構文の安全なサブセットが使用され、この Midl 用のコンパイラが同梱され、IDE に統合されているため、これらの問題は過去のものになるはずです。

Delphi 2009 もインストールしたばかりですが、タイプライブラリのサポートが改善されているようです。ただし、私はかなり長い間 COM とタイプ ライブラリを扱ってきました。ここでは、私が長年にわたって発見した一般的な落とし穴を紹介します。私も、かなりバグが多く、Delphi 2006 (2009 を使用する前のバージョン) までのバージョンであることに同意します。

  • 開く前に、常にすべてのファイルを書き込み可能にしてください。これは明白に聞こえるかもしれませんが、ソース管理を使用する場合、これを忘れてファイルを開いた後に読み取り専用フラグを削除しようとすることがあります。Delphi はこれに対処できません。tlb を開く前に、tlb が書き込み可能であることを確認してください。
  • スタンドアロンのタイプライブラリを編集する場合は、プロジェクトを開いている必要があります。何らかの理由で、タイプ ライブラリを単独で開くと保存されません。空のプロジェクトを作成し、タイプライブラリを開きます。何らかの理由で、これによりタイプ ライブラリを保存できるようになります。
  • タイプ ライブラリがアプリケーションまたは COM+ で使用されている場合は、タイプ ライブラリを開く前にアプリケーションがシャットダウンするか COM+ が無効になっていることを確認してください。開いているアプリがあると、タイプ ライブラリを保存できなくなります。

ただし、最善の解決策はおそらくアップグレードだと思います。Unicode もサポートされます。

Delphi 2009 を使用すると、巨大な TLB ファイルの手間が大幅に軽減され、既存のオブジェクトの変換は簡単に行えましたが、com オブジェクトはサードパーティのライブラリを使用していません。

ライブラリ ベンダーがサポートされているバージョンをリリースしたら、GUI アプリケーションを移行する予定です。

ここでの TLB インターフェイスでも同じエクスペリエンスが得られます。単に使用をやめただけです。

フレームワークのさまざまな部分にいくつかの個別の IDL ファイル (手動ビルド) を使用し、#include コンストラクトを使用してそれらを実際のアプリケーションの IDL に組み込み、MIDL を使用して単一の tlb を生成し、それを tlibimp します。アプリケーションに独自の IDL がない場合は、さまざまなフレームワーク TLB ファイルのプリコンパイル済みバージョンを使用できます。

フレームワークが新しいバージョンになると、IDL ファイル内のすべての必要なインターフェイスで GUIDS を再生成するスクリプトが実行されます。

これは長年にわたって私たちに役立ってきましたが、新しい Delphi 2009 に移行するには、IDL/TLB ツールセットが IDE に統合されるだけでなく、自動ビルドなどに関して多用途である必要があります。いくつか実験してみるのが待ちきれません!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top