4

いくつかのビジネスロジックを.NETに実装し、いくつかをDelphiに実装しています。今、私はDelphiXE2にアップグレードすることを計画しています。

Delphi XE2から.netアセンブリを使用するためのプロビジョニングはありますか?

更新:マネージドコードとアンマネージドコードを統合できるHydraフレームワークについて聞いたことがあります。誰かが小さなデモ/コードスニペットでそれについてもっと説明できますか?

更新:このHydraFrameworkの試用版でいくつか試してみました。ただし、これをDelphiコードでマップできるように、インターフェイスを作成するために.NETアセンブリも変更する必要があります。

.NETアセンブリを変更せずに使用する方法はありますか?

4

4 に答える 4

4

AToZed CrossTalkをご覧ください。COM 相互運用機能を使用せずに .NET アセンブリを直接使用できます。

于 2011-11-03T17:29:49.380 に答える
1

Nilesh さん、 私はDelphi 6の予測からのみこれに答えることができます。そのため、Delphi XE2 には新しい .NET 相互運用オプションがある可能性があることに注意してください。

したがって、(あなたの)Delphi 6 アプリから(あなたの).NET アセンブリ機能を使用する最も簡単な方法は、.NET アセンブリを変更して COM が見えるようにし、Delphi で通常の方法でその COM インターフェイスを使用するだけです。

.NET プロジェクトから。必要な機能をインターフェース (またはインターフェース) に抽出する GUI 属性をそれらのインターフェースに適用する プロジェクト オプションで、プロジェクトを「COM 可視」としてマークし、再構築します。アセンブリを COM に登録する必要があります (メモリが機能する場合は、コマンド ラインから regsvr を実行してください!)。

デルファイから; タイプ ライブラリのインポートを実行してアセンブリ DLL から TLB を取得し、適切な GUID を使用して CoCreate() を実行し、他の COM ライブラリと同様に使用します。

于 2011-11-03T12:36:22.757 に答える
1

XE2 については、唯一壊れる可能性のある新機能は 64 ビットです。

しかし、COM の観点からは、COM オブジェクトが 32 ビットまたは 64 ビットのコードで実装または呼び出されることが重要な場合があります。

COM オブジェクト タイプは、レジストリ キーを介して登録されます。これは regasm.exe ユーティリティが行うことです (レジストリへの書き込み)。32 ビット ビットのレジストリ ノードであり、64 ビットのレジストリ ノードとは明らかに異なります。

たとえば、COM オブジェクトが 32 ビットとしてコンパイルされている場合、32 ビット レジストリまたは 64 ビット レジストリに (reagasm呼び出しを介して)登録されます。

ただし、32 ビットの Delphi アプリケーションを使い続ける場合は、COM ラッパーを 32 ビットとしてエクスポートするように指定しても、追加の問題は発生しません。つまり、32 ビット プロセスを作成する場合、XE2 は Delphi の以前のバージョンとまったく同じように動作します。

詳細については、 http://www.gfi.com/blog/32bit-object-64bit-environmentを参照してください。

もう 1 つの解決策は、COM オブジェクトをプロセス外で実行することです。この場合、ビット数は問題にならず、32 ビットまたは 64 ビットに関する問題は発生しません。

XE2 には非常に厄介なバグがあったことに注意してください。要するに、場合によっては COM アクセスが壊れていました。最新の「Update pack 2」で問題が解決したようです。

もちろん、Delphi XE2 のクロスプラットフォーム機能を使用する場合、COM オブジェクトは Mac OS X では使用できません。;)

于 2011-11-03T13:06:26.637 に答える
0

非管理エクスポートと呼ばれるものを実行できます。

Delphi Prism は言語でサポートしていますが、C#/VB.NET はサポートしていません。しかし、それを使用するためのプロジェクト テンプレートがあります。著者のサイトを参照してください。

アンマネージ エクスポートは、ネイティブ コードが COM 相互運用なしでマネージ コードを呼び出すことを可能にする手法です。Giesecke 氏はこのテーマに関する記事を持っています

于 2011-11-04T16:59:58.190 に答える