2

私は、FORTRAN で書かれており、劣決定数学の問題の最小二乗解に使用される minpack を私の C# Windows フォーム ソリューションに含めようとしています。

私は、minpack fortran サブルーチンを .dll にコンパイルすることが可能であることを読みました。そのうち 7 つ (すべて別のファイルにあります) があり、それを Visual Studio 2012 の私の c# プログラムへの参照として追加できます。

私はこれを2日間試みましたが、あまり運がありませんでした。Fortran ファイルをコンパイルするために GCC GNU をダウンロードしました。これまでの私の手順は次のとおりです。

1) 7 つのファイルすべてに対して、mingw64env コマンド プロンプトで構文「gcc -c filename1.f」を使用して、Fortran ファイルを Common Object File Format (COFF *.o) ファイルにコンパイルします。

2) 次に、「gcc -shared -o mindpack.dll filename1.o filename2.o filename3.o...」という構文を使用して、これらのファイルを一緒に共有実行可能ファイルにコンパイルしました。

これにより、エラーが報告されていない .dll ファイルが出力されます。

3) しかし、Windows フォーム プロジェクト (C#) への参照として追加しようとすると、「'*.dll' への参照を追加できませんでした。ファイルにアクセスできることを確認してください。有効なアセンブリまたは COM コンポーネントです。」

4) これを修正するための提案の 1 つは、ファイル C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\TlbImp.exe を見つけて、構文「TlbImp.exe minpack.dll」で実行することでした。 」しかし、これによりエラー「TlbImp : エラー T10000 : 入力ファイル 'C:\mingw64\minpack.dll' は有効なタイプ ライブラリではありません。

私はc#の学習を始めたばかりで、オンラインのソリューションのいくつかはヘッダーファイルやDEFファイルなどで頭を悩ませているので、誰かが私を正しい方向に向けることができますか?これらが関連しているかどうかはわかりません.

Fortran サブルーチンのコレクションを、できれば GCC GNU (または他のフリー ソフトウェア) を使用して、c# から呼び出すことができる単一の .dll ファイルに変換するソリューションを誰かが提示できれば、非常にありがたいです。

前もって感謝します。

4

2 に答える 2

1

アンマネージ dll は、C# アプリケーションへの参照として追加できません。GCC は COM オブジェクトを簡単にリンクできません。

dll が多数のグローバル関数をエクスポートする場合、C# からそれらを呼び出すために Platfrom Invoke (DllImport 属性) を使用できるはずです。

この記事またはGoogle検索の他の記事をご覧ください。

于 2013-09-11T11:41:05.713 に答える