2017-09-14 95 views
0

2009年,我編寫了一個小應用程序,將一個Fortran DLL(內容不可用)調用到VB.NET應用程序中。有效。但是,我現在需要重新訪問代碼,並發現VB.NET應用程序如果在Visual Studio Community 2017中編譯,將無法從原始源代碼運行。從VB.NET調用Fortran程序

Fortran dll的參數是一個組合的整數,實數陣列和字符的:

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

在VB代碼,我使用:

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'或其某個依賴項。此程序集由比當前加載的運行時更新的運行時構建,無法加載。發生了 – Sneezo

回答

0

新VS2017中的.Net版本可能比您的原始代碼更新。我會將.Net版本更改爲您當時使用的CLR版本;可能.Net 3.5。然後你需要導入你的DLL。確保在添加對DLL的引用時,可以在對象瀏覽器中檢查。現在我還假設你的DLL不是託管代碼,意味着代碼沒有寫在.Net中。我會先檢查這些東西然後從那裏前進。

1

我的目標平臺是錯誤的。舊的DLL是x86架構,但我的VB2017編譯器默認爲x64。我改變了這一點,現在我的舊代碼編譯並運行。快樂的時光。

+0

賓果!很高興有幫助;-) –