Fortran 90(コンパイラはIntel Parallel Studio XE 2011)によって生成されたVB.NET 2010でDLLを呼び出そうとしています。しかし、 "PInvokeStackImbalance"は、実行すると発生します。 私は以下のメソッドを試してみました: (1) "INTEGER"、 "LONG"、 "INT32" ...のような宣言のデータtyeを変更しますが、エラーは依然として終了します。 (2)実際の&仮想パラメータで配列の寸法を確認してください。輸送時に配列がないため、このメソッドは無視されます。 (3) "デバッグ - 例外 - 管理されたデバッグアシスタント"の "ContextSwitchDeadlock"と "PInvokeStackImbalance"のオプションのチェックを外してください。実際の問題を解決できないと思いますので使用しません。VB.NET 2010で "DLL"(Fortranで生成)を呼び出すときのPInvokeStackImbalance
異なる循環でエラーが発生していることがわかりました(下の図を参照してください。98と99でそれぞれ発生しています)。つまり、DLL自体にインターフェイスではなくエラーがありますか? enter image description here enter image description here
以下は、VB.netの私のコードとFortanの宣言です。 (1)VB.net:
Public Class Form1
Public Declare Sub main_sub Lib "smgama_dll.dll" (ByRef cla As Long, ByRef nf As Long)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim cla, nf As Long
cla = CLng(TextBox1.Text)
nf = CLng(TextBox2.Text)
Call main_sub(cla, nf)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Application.Exit()
End Sub
End Class
(2)のFortran:
subroutine main_sub(cla,nf)
!DEC$ ATTRIBUTES DLLEXPORT::main_sub
!DEC$ ATTRIBUTES ALIAS:"main_sub"::main_sub
use Global
use suba
use suba1
use suba2
implicit none
real,allocatable::upbound(:),downbound(:),xbest(:),y(:),ybest(:),upbound1(:),downbound1(:),g_x(:),g_y(:)
real,allocatable::QC(:),QCC(:),Q_mean(:)
character(len=20)::filename
integer::n,szz,tt,nf,i,iter,cla,j
......
End subroutine
今後の参考として、画像へのリンクを提供し、「ここに画像の説明を入力」というプロンプトが表示されたら、実際に画像の説明を入力してください。 – jmcilhinney
これはVB6宣言です。 VB.NETでは "整数" =整数ではなく、Longです。 –