1

Delphi 4および/または5アプリケーション機能(.exe)をC#アプリケーションに統合できますか?

私は、既存のDelphi 4/5で作成されたアプリケーションに基づいて、現在、私の会社の誰も理解していないバッチ処理スクリプトと一緒に保持されている新しいアプリケーションを書き直すという任務を負っています。

暫定的な解決策として、C#GUI \ラッパーを上に配置して、保守と実行を容易にすることができるかどうかを調査するように依頼されました。

Delphi 6アプリケーションはリフレクションを使用してC#アプリケーション内で呼び出すことができることは知っていますが、その方法は完全にはわかりません。

では、元の質問に戻ると、Delphi 4/5アプリケーション機能をC#アプリケーション内で呼び出すことができますか?

前もって感謝します。

4

4 に答える 4

2

Delphi .exeはC#から実行できます。しかし、これはあなたの主張ではないと思います。

COMサーバーを使用することもできます。これは標準ですが、COMオブジェクトをコンピューターに登録する必要があります(を実行することによりregsrv32.exe)。展開はそれほど簡単ではありません。

または、Delphiコードをライブラリとして定義し、C#コードから.dllを読み込んで実行することもできます。

Delphi 4または5からC#オブジェクトにアクセスする(つまり、C#RTTIにアクセスする)場合は、VCLのマネージ拡張(Delphi Win32の.Net相互運用機能)などの低レベルのユニットを使用する必要があります。これは非常に完全で、古いバージョンのDelphiで動作します(一方、 Hydraよりも高レベルのものはDelphi 4または5をサポートしません)。

編集

もう1つの簡単な通信は、GDIメッセージです。C#コードからGDIコマンドを送信してDelphiアプリケーションを制御できますが、PostMessage()API呼び出しを使用します。

于 2012-04-04T17:21:22.923 に答える
2

質問の根底にある前提は、Delphiコアの周りのC#ラッパーが保守と実行が簡単であるということであるように思われます。それが当てはまらない場合、ラッパーを作成するというアイデアはあまり役に立ちません。私はそれが間違って考えられた概念であると信じています。

望遠鏡と通信できるアプリケーションを作成したと想像してみてください。それは完璧に行います。その場合、望遠鏡の通信部分だけを抽出してDLLに入れ、望遠鏡との通信タスクを実行するためだけにDelphi DLLを使用するユーザーインターフェイスをC#で記述できる可能性があります。ただし、Delphiアプリケーションがすでに適切に構造化されていて、この望遠鏡通信ライブラリのようなタスクがすでに存在しない限り、Delphiアプリケーションの一部を抽出して、C#から使用するのは簡単ではありません。そのような状況が存在する場合は、ネイティブのDelphi DLL関数のエクスポートを使用して、C#からそれらを呼び出します。これは既存のdelphi実行可能ファイルを使用しておらず、Delphiアプリケーションの一部をC#から使用できるものにリファクタリングするために何時間もの作業を必要とします。

別の答えはCOMサーバーについて言及しており、それは可能ですが、物事を簡単にすることはできません。正規表現についての古いジョークのように。問題があり、正規表現を使用して解決しようとすると、2つの問題が発生します。COMサーバーを使用して既存のアプリケーションを非表示にし、C#を使用してその上にまったく新しいUIを作成しようとすると、同じことが当てはまります。純粋にデルファイまたは純粋にC#で開発を続けるよりも、実際には、改善、デバッグ、およびその方法での開発を継続するために、より多くの技術スキルが必要になります。これは、マイナスの労力の節約になります。

Delphiアプリケーションの機能に関する情報は提供していませんが、ファイル形式を読み取ったり、通信プロトコルを実行したり、古いデータベースに接続したりする基幹業務または垂直市場のアプリケーションであると仮定します。書き直したくない。

C#UIを作成することで、Delphiアプリケーションのユーザーインターフェイスを表示せずにC#のユーザーインターフェイスに置き換えることは、あなたのアイデアが何も改善せず、事態を悪化させるだけであることはほぼ間違いありません。デッドロックは、熟練したdelphi開発者がいないこと、または既存のアプリケーションが何をするかを理解できる賢い開発者がいないことから生じます。

このような状況では、通常、解決策は人間による解決策です。熟練したデルファイ開発者を雇い、アプリケーションを現代のDelphi時代(Delphi XE2)に持ち込むか、熟練した非デルファイ開発者を雇い、アプリケーションを他の言語に移植します。デルファイアプリケーションの上に「ラッパー」を書くことを提案し、それが「より簡単」になると考える人は、明らかに既存のアプリケーションを書き直すことができないと感じます。

確かに、あなたのdelphiアプリケーションが何をするのかについては十分にわかりませんが、「恐怖に駆られた」決定のように聞こえます。古いコードをラップすることは、ほとんどの場合、良い考えではなく、ほとんどの場合、より多くの問題を作成するだけです。

于 2012-04-04T22:24:02.237 に答える
1

Delphi 5はCOMサーバー機能の実装をサポートしています(以前のバージョンについてはわかりませんが、D2は間違いなくサポートしていませんでした)。

利用可能なソースがある場合は、

  • タイプライブラリと、タイプライブラリで定義されたインターフェイスのCOM実装を追加します。

  • 実行可能ファイルを登録します(通常、Delphiマジックのおかげで起動時に自動的に行われます)

  • MSDNの手順に従ってください:.NETFrameworkへのCOMコンポーネントの公開

于 2012-04-04T16:09:32.063 に答える
1

もちろん。C#は任意の.exeを呼び出すことができます。Process.Startを使用するだけです。

http://www.dotnetperls.com/process-start

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

于 2012-04-04T15:59:35.190 に答える