2012-04-04 14 views
1

Delphi 4と\ 5のアプリケーション機能(.exe)をC#アプリケーションに統合できますか?Delphi 4および/またはDelphi 5の実行可能ファイルをC#アプリケーションに統合できますか?

現在私の会社の誰も理解していないバッチ処理スクリプトと一緒に開催されている既存のDelphi 4/5書込みアプリケーションに基づいて新しいアプリケーションを書き直すことを任されました。

私は暫定的な解決策として、C#のGUI \ラッパーを上に置くことができるので、維持して実行するのが簡単かどうかを調べるように求められました。

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

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

ありがとうございます。

+1

脇に、私は反射がこれに入るのか分かりません。あなたはそれが何を意味するのですか? –

+0

私は数年前にこのコードを見てきましたが、それはリフレクションを使ってDelphiのexeを呼び出してからexe内の特定のメソッドを呼び出すと説明されました。残念ながらこれは以前の会社のものでしたが、私はもうコードにアクセスできません。 – zeencat

+0

それは意味をなさない。 C#のリフレクションはDelphiのexeでは動作しません。 –

答えて

2

Delphiコアの周りのC#ラッパーは、維持して実行するのが簡単であり、そうでない場合、ラッパーを作成するというアイデアはあまり役に立ちません。私はそれが間違って考えられた概念だと信じています。

私は望遠鏡と話すことができるアプリケーションを作ったとします。それは完全にそれを行います。その場合、望遠鏡通信部分だけを抽出してDLLに入れ、C#でDelphi DLLを使用してテレスコープ通信タスクを実行するユーザーインターフェイスを作成することができます。しかし、あなたのDelphiアプリケーションが既にうまく構築されていない限り、この望遠通信ライブラリのようなタスクが既に存在していない限り、Delphiアプリケーションの一部を抽出するのは非常に簡単ではなく、C#から使います。そのような状況が存在するなら、私はネイティブのDelphi DLL関数のエクスポートを使用し、C#からそれらを呼び出すでしょう。これは、既存のdelphi実行ファイルを使用していないため、Delphiアプリケーションの一部をC#から使用できるものにリファクタリングするのに、長時間の作業が必要です。

もう1つの答えはCOMサーバーについて言及していますが、これは可能ですが、簡単にすることはできません。正規表現についての古い冗談のように。問題があり、正規表現を使用して問題を解決しようとすると、今は2つの問題があります。 COMサーバーを使用して既存のアプリケーションを隠し、C#を使用して新しいUIを全体的に作成しようとすると、同じことが成り立ちます。純粋にデルファイで開発するか、純粋にC#で開発し続けるよりも、それを改善し、デバッグし、開発する技術的スキルが実際に必要です。それは努力のマイナスの節約です。

Delphiアプリケーションの機能についての情報はありませんが、デルファイアプリケーションが何らかのファイル形式を読み込んだり、通信プロトコルを使用したり、古いデータベースに接続したりする基幹業務アプリケーションであると仮定しますあなたが書き直したくないということです。

C#UIを作成すると、Delphiアプリケーションのユーザーインターフェイスを表示せずにC#のものに置き換えることができれば、あなたのアイデアは何も改善されず、物事は悪化する。あなたのデッドロックは、熟練したデルファイの開発者がいなくても、既存のアプリケーションが何をしているかを理解できる巧妙な開発者がいなくてもかまいません。

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

私はあなたのデルファイアプリケーションが何をしているかについては十分に分かっていませんが、確かに私には「恐怖主義」の決定が好きです。古いコードをラップすることは、決して良い考えではなく、最も多くの場合、より多くの問題を作成するだけです。

+0

私はアプリケーションの書き直しを義務づけられており、私はDelphiソフトウェアの保守と開発の経験があります。私は長期的な解決策としてC#にアプリケーションを移植する予定ですが、その間にバッチスクリプト言語を置き換えるラッパーを作成することが可能かどうか尋ねられました。どのような種類のソフトウェアを開発した経験がないマネージャーからこの質問を受けました。私は全面的な書き換えが最良の選択であることに同意しますが、可能かどうかを調査するように求められました。 – zeencat

+1

XE2に移植した後で、Delphiでそれを維持し続けるのが最適な選択です。しかし、あなたは脳よりも権威のある人に任されているので、私はあなたに幸運を祈ります。 :-)(デルファイのアプリケーションをC#に書き直す何百もの企業が、通常は彼らがそのように働く人をもっと雇うことができると思っているからです)。 –

+0

フィードバックをいただきありがとうございます。ビジネスはマイクロソフトのパートナーであるため、.NETに移植されたすべてのソフトウェアを入手することを熱望しています。長期的には私はこれがビジネスにおけるC#開発者にとって唯一のデルファイだから、これが最善の解決策だと私は信じています。 – zeencat

1

C#は任意の.exeを呼び出すことができます。ただ、Process.Startを使用します。

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

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

+1

私が意味するものではありません。私はC#アプリケーションからDelphiアプリケーション内の特定のメソッドを呼びたいと思います。とにかくおかげで。 – zeencat

+1

@zeencat問題は問題です。通常、.exeファイルのメソッドは呼び出さないでください。あなたはそれらを実行します。 exeがCOMサーバーでない限り、それは言及していません。実際の詳細を含めるように質問を修正する必要があります。 –

1

COMサーバ機能を実装デルファイ5支持体には、(以前のバージョンについては知らない、D2は間違いありませんでした)。

あなたが利用可能なソースを持っている場合は、

  • (通常起動時のおかげで自動的に行われる実行可能ファイルを登録し、

  • をタイプライブラリとタイプライブラリで定義されたインターフェイスのCOMの実装を追加Delphiの魔法)に

  • は、MSDN上の手順に従ってください:Exposing COM Components to the .NET Framework

2

Delphi.exeはC#から実行できます。しかし、私はこれがあなたの問題ではないと思う。

COMサーバーは標準ですが、COMオブジェクトをコンピュータに登録する必要があります(regsrv32.exeを実行してください)。展開が簡単ではありません。

また、Delphiコードをライブラリとして定義し、.dll from the C# codeをロードして実行することもできます。

Delphi 4または5(つまりC#RTTIにアクセスする)からC#オブジェクトにアクセスする場合は、Managed extensions for VCL - .Net interop for Delphi Win32のようなローレベルのユニットを使用する必要があります。これはかなり完成しており、古いバージョンのDelphiで動作します(Hydraより上位のものはDelphi 4または5をサポートしません)。

編集

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

関連する問題