調用Fortran DLL我有一個Fortran語言編寫的,我需要從那裏我所有的其他功能都寫VB.NET調用的子程序。我沒有寫fortran,也幾乎不知道fortran。我得到了我的dll函數調用的下面的異常,並不知道如何解決它。我不知道這是否是由於不一致的可變長度?AccessViolationException是未處理的,從VB網
我有我的FORTRAN源,並使用G95編譯器編譯它。我試着用一個標誌來編譯它,它應該強制所有的實數都是32位(-r4)。它讓我感到奇怪,你似乎沒有必要在Fortran中使用之前初始化變量。我認爲它應該是一種脊背語言。
不管怎樣,下面是我得到異常:
System.AccessViolationException是 未處理消息=試圖讀取 或寫入保護內存。這是 通常表示其他內存 已損壞。源= PTPWrapper
堆棧跟蹤: 在PTPWrapper.Module1.pointtopoint(單& IELEVAT,一& IDIST,一& FREQ, 單& HTAMSL,一& DLOSS,一& 雜波) 在PTPWrapper.Module1.Main( )在C:\ Documents和Settings \ SGoldman \我的文檔 \視覺工作室 2010 \項目\ PTPWrapper \ PTPWrapper \ Module1.vb中:行在System.AppDomain._nExecuteAssembly(RuntimeAssembly 組件,字串[] args) 在System.AppDomain.ExecuteAssembly(字符串 assemblyFile,證據 assemblySecurity,字串[] args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在System.Threading.ThreadHelper.ThreadStart_Context(對象 狀態) 在系統.Threading.ExecutionContext.Run(的ExecutionContext 的ExecutionContext,ContextCallback 回調,對象的狀態,布爾 ignoreSyncCtx) 在System.Threading.ExecutionContext.Run(的ExecutionContext 的ExecutionContext,ContextCallback 回調,對象狀態) 在System.Threading.ThreadHelper .ThreadStart() 內部例外:這裏
是我的VB函數聲明和函數調用:
Declare Sub pointtopoint Lib "diff5z11.dll" (ByRef IELEVAT As Single, ByRef IDIST As Single, ByRef FREQ As Single, ByRef HTAMSL As Single, ByRef DLOSS As Single, ByRef CLUTTER As Single)
pointtopoint(elevation(0), distance, freq, height, dlo, clut)
所有的變量都被定義爲在這裏VB 32位單打。
和這裏的Fortran代碼的前幾行:
subroutine pointtopoint(IELEVAT, IDIST, FREQ, HTAMSL, DLOSS, CLUTTER)
real ielevat(*)
dimension oblim(2)
dd = 0.1
EK = 1.333 ! Earth curvature (4/3 earth)
HR = 9.1 ! Rcvr Ant ht (m), for 30 feet
HRAMSL = IELEVAT(IDIST) + HR
DIST = float(idist)*dd
FRESMIN = HR + 1.0
DLOSS = 0.0
TDLOSS = 0.0
RDLOSS = 0.0
ADJ = 0.0
任何想法如何,我可以得到電話工作,讓我的數據?謝謝!
非常感謝,我將不得不亂與子程序一起,看看我是否無法澄清其中的一些含糊之處。 HTAMSL - 發射機高於平均海平面的高度 HRAMSL - 接收機高於平均海平面的高度 所以至少這不是打破了這一點。我會讓每個人都知道我是否工作。再次感謝。 – 2010-05-27 14:30:40