2010-11-25 8 views
3

Windows XPのDelphi(D7およびD2006)でプログラムを作成しています(近い将来Windows 7に移行します)。私は、私がやっている作業のいくつかのために数学ライブラリを使う必要があります。私が見てきた数学ライブラリのほとんどは(現在はMathematicaに向かって傾いています)コンパイルされたCコードを生成します。そのようなコードは、私のメインプログラムに特定の機能を提供します。複数の開発言語を使用する方法

私は非常に基本的な質問があります。この開発環境では、コンパイルされたCコードをDelphiからどのように利用するのですか?私は実際に私がそのプロセスを開始するための赤ちゃんのステップが必要です。

+0

** Mathematica **を使ってCコードを作成する予定ですか? –

+0

@Belisariusはい。 –

+0

@Chrisあなたの答えをありがとう。 MathematicaからCに移行するための変換ソフトウェア/機能へのポインタを投稿してください。 –

答えて

4

私はFE製品OrcaFlexでこれをかなり行いました。 DelphiのCコードにリンクするには、静的または動的の2つのオプションがあります。分散とバージョン管理がはるかに簡単になるため、静的にリンクします。しかし、それを静的に動作させることは実際には非常に難しいことであり、デルファイのいくつかの文書化されていない側面に頼らざるを得ません。

あなたのニーズに合わせてダイナミックリンクが最適であると思われます。基本的には、CコードをコンパイルしてDLLにリンクする必要があります。これを行うには、Borland Cコンパイラを使用することをお勧めします。これを行うには、フリーコマンドラインバージョンBCC55を使用できます。 Borland Cを使用する利点は、Delphiのように8087浮動小数点ユニットについても同じ前提があることです。 MSVCを使用して構築すると、MSは浮動小数点例外を発生させないことを選択したことに気付くでしょう。 Borland Cは浮動小数点例外を発生させます。これはちょっとしたコーナーケースですが、堅牢にする必要がある製品を出荷しようとする場合は適切です。

Cコードは、デフォルトではCの呼び出し規約を使用していることを知っておく必要があります。あなたは外部ルーチンをcdecl呼び出し規約として宣言することによってそれをDelphiに持ち込みます。

もう1つ注意が必要なことは、2つのモジュール間に明確なインターフェースを定義することです。例外がモジュール境界を超えないようにする必要があります。また、境界線に特殊な型(Delphi文字列など)を渡さないようにする必要があります。したがって、文字列の場合は、PChar(または、より良いPAnsiCharまたはPWideCharを使用して、Delphi 2009以降にアップグレードするときに意味が変わらないことを確認してください)。

2

現在Mathematicaがインストールされている場合は、ドキュメントセンターにアクセスしてguide/CLanguageInterfaceを参照してください。それ以外の場合は、ガイドがavailable on the webであり、そこにはよくお読みください。

Mathematicaは、完全な関数が必要な場合はMathematicaエンジンとリンクするMathematicaエンジンとリンクするC言語プログラムを生成することができます。また、静的にリンクできるコードを生成できるコンパイルされたMathematicaライブラリで。スタンドアロンコードが可能です。

Code Generator documentationを参照してください。

CプログラムをDLLsに変換できれば、そのような外部関数には外部の宣言で比較的簡単にアクセスできます。

function MathematicaRoutine(const x : double) : double; external 'MyInterface.dll'; 

あなたは、静的バインドを達成するために必要がある場合、これは実際にそれが可能な場合のMathematicaは、インストールされていない使用するため、動作するように得ることに複雑の多くがあるようにバインドされています。私はそれを試みたことがない。

3

私はLohningerのSDLライブラリ(http://www.lohninger.com/mathpack.html)に非常に満足しています。これはDelphiで書かれており、アプリケーションにコンパイルできます。したがって、このスレッドの他の応答で説明されているように、バンドルや呼び出し規約の問題や浮動小数点の使用の違いはありません。

は彼が含まれて何を見てみましょう。あなたが幸運であれば、あなたのニーズは彼の図書館で満たされ、あなたはそれを使うことができます!

+0

私は非常に役に立つと思われるSDLライブラリを見ました。しかし、それは私が特に求めていた機能をサポートしていませんでした。私は今TPMathに行った。ありがとう –

2

あなたは、RAD Studioを使用してDelphiおよびC++(ビルダー)コードを使用してプロジェクトを混在させることができます。自動的に作成されたCコードをC++ Builderファイル(.cpp)に入れ、残りのものはDelphiファイルを追加します。

関連する問題