この投稿で、ニック・ホッジズは次のように書いています。「Delphiは.NetコードをEXEにリンクできます」。どうすればいいですか?このデルファイ機能についての例はありますか?
5 に答える
リンクした記事の下にあるコメントを読むと、これは現在は機能していないdelphi.NET(正しく覚えていればdelphi8)の機能であることがわかります。これが可能であっても、.NETFrameworkに依存することになります。
だからあなたの質問への答えは:不可能です
C#で記述され、ComVisible(true)として定義されたインターフェイスを備えた通常のCOMコンポーネントを使用できます。
Delphi実行可能ファイルでのC#アセンブリの別のより直接的なインポートは、ManagedVCLで可能です。
マネージドVCLは次のことができます。
- アセンブリ名または場所を使用して、COMに登録されていないアセンブリから.Netオブジェクトを作成し、ストリームから.Netアセンブリをロードします。
- COMに表示されない.Netオブジェクトを作成して使用します。
- パラメータ化されたコンストラクタを使用して.Netオブジェクトを作成します。
- 静的プロパティ/メソッド/フィールドを含む.Netオブジェクトのプロパティ/メソッド/フィールドを呼び出します。
- .Net例外を処理し、例外タイプ名、StackTraceなどを含むすべての.Net例外プロパティを取得します。
- メモリ使用量や世代ごとのヒープのサイズなど、ロードされた.NetFrameworkのインスタンスに関する情報を取得します。
- 必要な.Netランタイムをロードし、起動時に使用するランタイムのバージョンを選択することもできます。
- .NetコントロールをVCLWin32フォームに配置します。
- Win32アプリケーションのTDataSetの子孫としてADO.Netデータソースを使用します。ADO.Netは、SQL Server 2005(Yukon)用のネイティブで最もサポートされているAPIになります。
- ASP.Netページとサービスをホストします。
- .NetアセンブリをリソースとしてWin32アプリケーションに埋め込みます。
これは、2つのプラットフォーム間でUIを共有することを目的としたHydraよりもはるかに低レベルですが、Managed VCLは、DelphiプロセスでDotNet CLRマシンをホストし、独自のクラスを介してアクセスすることを目的としています。素晴らしい作品です!
Nickが書いた記事は、Delphiの現在ほとんど廃止された古いバージョンに言及しています。Delphi 2006および2007が「RADStudio」の一部として出荷されたとき、それらには3つの「パーソナリティ」が含まれていました。
- デルファイ
- Delphi.net
- C ++ Builder
.netパーソナリティは出荷製品として削除され、「2009」リリースまたはそれ以降のリリースには表示されなくなりましたが、「Delphi.net2007」を提供した基盤となるテクノロジがまだ残っていることを知っておくとよいでしょう。 delphi自体は.netアセンブリに依存しているため、DelphiXE3内で使用されます。つまり、Embarcaderoは引き続き「Delphi.net」を内部で使用していますが、提供していません。それは、彼らがけちであるからではなく、「Delphi.net」が製品としてもはや重要ではなく、.Netが「すべての新しいMicrosoftAPIの未来」ではなくなったからです。
マイクロソフトは多くのエネルギーを費やして、誰もが.Netを恐れるようにしました。誰もがそれを受け入れる必要があっただけでなく、Microsoftは.netがWindowsAPIを生成する新しいデフォルトの方法になると主張しました。デルファイは当時Windows製品のみであり、Delphiは依然としてWindowsアプリケーションの作成に主に使用されているため、Windows専用ツールの開発者は、Microsoftの表明した意図を無視する余裕はありませんでした。.Netは未来でした。
マイクロソフトの内部でさえ、そのアイデアは非常に必要な死を遂げました。オフィスチームとWindowsチームは.netクールエイドを飲まなかったので、.netはWindowsのもう1つのレイヤーになりました。
最近では、2007年以降の製品バージョンで.netアセンブリを生成または使用するための機能は、Delphiの「ボックス内」に提供されていません。ただし、サードパーティのソリューションが存在します。
誰かが「古いバージョンのオファーの一部としてDelphi.net2007を引き続き入手できる」とコメントしましたが、ほとんどのRAD Studioの購入で得られますが、この遅い日付でDelphi.netを開始することはお勧めしません。
Delphiのような構文を使用した純粋な.netプログラミングについては、DelphiPrismを試してください。.netコードとDelphiネイティブコード間のインターフェイスについては、同じプロセス内でRemObjectsHydraを試してください。異なるプロセスでの.netコードとDelphiコード間のインターフェイスについては、RemObjectsSDKを試してください。
ニックの発言に関する限り、彼は自分のブログの上部に、これは歴史的価値のために再投稿された非常に古いブログ投稿であると投稿しました。それが彼の発言の意味です。それらは最初に投稿されたときは最新のものであり、それ以来少し時間が経っています。
Update Bruceは、.netを使用してCOMコンポーネントを作成した場合でも、コンポーネントのインポート手法に関するコメントが適用される可能性があることを親切に指摘しています。次に、COM相互運用機能を使用して、DelphiからCOM経由で使用できる特別な.netアセンブリを作成できますが、これを行ったことがないため、ここでは試しません。
市販のソリューション「ハイドラ」があります。http://www.remobjects.com/hydra/
もう1つの可能性は、COM相互運用機能を使用することです。.NETソースを埋め込むには、アセンブリをリソースファイルとして保存し、単一の.exeファイルが必要な場合は、後でディスクに書き込むことができます。
AToZedCrossTalkをご覧ください。
CrossTalkとは何ですか?
CrossTalkを使用すると、ネイティブのDelphiコードで.NETクラスとライブラリを使用できます。.NETクラスを変更したり制御したりする必要はありません。CrossTalkを使用すると、クラスがネイティブクラスのように見えるようになります。レジストリエントリやCOM登録は必要ありません。アプリケーションディレクトリに必要なDLLファイルはごくわずかです。