Ich versuche, DLL in VB.NET 2010 aufzurufen, die von Fortran 90 generiert wird (der Compiler ist Intel Parallel Studio XE 2011). Der "PInvokeStackImbalance" tritt jedoch auf, wenn ich ihn ausführe. Ich habe die folgenden Methoden versucht: (1) Ändern Sie die Daten Tye in der Deklaration, wie "INTEGER", "LONG", "INT32" ..., aber der Fehler noch immer beendet. (2) Überprüfen Sie die Dimension des Arrays im aktuellen virtuellen Parameter &. Da beim Transport kein Array vorhanden ist, wird diese Methode ignoriert. (3) Deaktivieren Sie die Optionen für "ContextSwitchDeadlock" und "PInvokeStackImbalance" in "Debug - Ausnahmen - verwaltete Debugging-Assistenten" .Ich denke, es kann das eigentliche Problem nicht lösen, also verwende ich es nicht.PInvokeStackImbalance beim Aufruf "DLL" (generiert von Fortran) in VB.NET 2010
Ich bemerke, dass der Fehler in verschiedenen Zirkulation auftritt (siehe Abbildung unten, in 98 und 99 auftreten). Bedeutet das, dass die DLL selbst einige Fehler anstelle der Schnittstelle haben? enter image description here enter image description here
Unten ist mein Code in VB.net und die Erklärung in 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
Wenn Sie zu einem späteren Zeitpunkt eine Verknüpfung zu einem Bild bereitstellen und die Aufforderung "Bildbeschreibung hier eingeben" angezeigt wird, geben Sie die Bildbeschreibung ein. – jmcilhinney
Dies ist eine VB6-Deklaration. In VB.NET "Ganzzahl" = Ganzzahl, nicht Long. –