Основной вопрос: Если я не могу изменить вызывающую процедуру из вызывающей программы, могу ли я все же перевести исходный исходный код DLL с Fortran 77 на VB.Net? То есть, можно ли заставить DLL, написанную на VB.NET, вести себя идентично той, исходный код которой изначально был написан на Fortran 77?
Я знаю, что столкнусь с проблемами со строками. Но ни одна из моих процедур не будет иметь ввода / вывода строк, только 4-байтовые целые числа и 8-байтовые двойники.
Мне нужно изменить DLL, изначально написанную на Fortran 77. Чтобы упростить любые будущие изменения, я хотел бы перевести исходный код DLL с Fortran на VB.Net. Я не могу изменить программу, которая вызывает DLL, и у меня нет кода для программы, которая вызывает DLL, поэтому я не знаю, как он ее вызывает. Прежде всего, возможно ли то, что я пытаюсь сделать? Я думаю, это потому, что DLL - это DLL независимо от исходного языка, не так ли? Вот где я нахожусь:
Исходный код Fortran выглядит так:
subroutine init(dwid)
use dfport
implicit none
common /fltcmn/ ifirst, icnt
integer ifirst, icnt
integer(4) dwid
external fndndx
cDEC$ ATTRIBUTES C, REFERENCE, DLLEXPORT, ALIAS:'_INIT' :: INIT
[code in here w/ return]
end subroutine init
function fndndx(dwid)
use dfport
implicit none
common /fltcmn/ ifirst, icnt
integer ifirst, icnt, fndndx
integer(4) dwid
[code in here w/ return]
end function fndndx
А теперь следует моя попытка перевести его (который сейчас не работает)
Public Class Class1
Public ifirst as Integer
Public icnt as Integer
Sub init(ByVal dwid as Integer)
[Code in here w/ return]
End Sub
Function fndndx(ByVal dwid as Integer) as Integer
[Code in here w/ return]
End Function
End Class
Я почти уверен, что [код здесь с возвратом] верен, поскольку это основные логические утверждения. Однако в чем я не уверен, так это в том, правильно ли я имею дело с «общими» операторами Фортрана и нормально ли иметь функции и подпрограммы внутри «класса» ...