2017-09-14 23 views
0

2009年に、私はFortran DLL(内容は利用できません)をVB.NETアプリケーションに呼び出すという小さなアプリケーションを書いていました。出来た。ただし、コードを再訪する必要があり、Visual Studio Community 2017でコンパイルされている場合、VB.NETアプリケーションが元のソースコードから実行されないことが判明しました。VB.NETからFortranルーチンを呼び出す

Fortran dllの引数は、整数、実数の配列とcharの:VBコード内

SV is a string (array of Fortran characters?) 
IV is an array of Fortran integers 
RV is an array of Fortran reals 

、Iを使用している:

Dim IV(1279) As Integer 
Dim RV(15999) As Single 
Dim IERR As Integer 
Dim SV As New String(" ", 5120) 
Dim FileDir As New String(" ", 64) 

Call FORT_SUB(SV, 5120, IV(1), RV(1), IERR) 

得EXEがクラッシュを呼び出すラインで。構文の要件がわずかに変わっているに違いないと思いますが、今は少し違ってFortranの呼び出しを行う必要があります...

+1

'コール時にクラッシュする 'という表現はあまり説明的ではありません。デバッガでコードを実行すると、例外メッセージは何ですか? – TnTinMn

+0

プログラムとDLLの両方が同じプロセッサアーキテクチャでコンパイルされていますか?例えば64ビットまたは32ビット?プログラムを再コンパイルしてdllにマッチさせてみてください。 –

+0

未知のモジュールで 'System.BadImageFormatException'型の未処理の例外が発生しました。 ファイルまたはアセンブリ 'VBNET.exe'またはその依存関係の1つを読み込めませんでした。このアセンブリは、現在ロードされているランタイムよりも新しいランタイムによって構築され、ロードできません。発生した – Sneezo

答えて

0

新しいVS2017の.Netバージョンはおそらく元のコードより新しいです。私は.NETバージョンをあなたが使っていたCLRバージョンに変更します。おそらく.Net 3.5。次に、DLLをインポートする必要があります。 DLLへの参照を追加するときに、オブジェクトブラウザで検査できることを確認してください。今私はあなたのDLLが.NETで書かれていないコードを意味するマネージコードではないと仮定しています。私はこれらのことを最初に確認し、そこから前進します。

1

ターゲットプラットフォームが間違っていました。古いDLLはx86アーキテクチャでしたが、VB2017コンパイラはデフォルトでx64になりました。私はそれを変更し、私の古いコードがコンパイルされ実行されます。幸せな日々。

+0

ビンゴ!喜んで助けた;-) –

関連する問題