9

私が働いている会社では、すべての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ファイルを正しく解析しませんでした。

4

5 に答える 5

10

Delphi 2009 をよく見てください。

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

詳細については、 Chris Bensen のブログをご覧ください。

于 2008-08-20T09:16:37.427 に答える
8

遠い昔(CodeGearで働き始める前)、IDEが提示した奇妙なDelphi化されたIDL言語をあきらめ、独自のIDLを作成し、MSmidlを使用してコンパイルしました。これは主に機能しました。唯一の落とし穴であるIIRCは、プロパティゲッターとセッターの自動化インターフェース(dispinterfaces)でdispids(id属性)が正しいことを確認することでした-tlibimpが期待する不変条件がいくつかありましたが、midlは保証しませんでした。

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

于 2008-09-01T21:36:52.857 に答える
5

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

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

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

于 2008-09-13T07:26:29.070 に答える
3

Delphi 2009 を使用すると、巨大な TLB ファイルの多くの問題が大幅に解消され、既存のオブジェクトの変換も簡単になりましたが、com オブジェクトはサード パーティのライブラリを使用していません。

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

于 2008-09-18T21:38:07.683 に答える
2

ここでのTLBインターフェイスの同じ経験:単にそれを使用するのをやめました。

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

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

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

于 2008-09-18T20:54:33.967 に答える