核となる質問:呼び出し元のプログラムから呼び出し元のプロシージャを変更できない場合でも、DLL の元のソース コードを Fortran 77 から VB.Net に変換できますか? つまり、VB.NET で記述された DLL を、そのソース コードが最初に Fortran 77 で記述されたものと同じように動作させることは可能ですか?
文字列で問題が発生することはわかっています。しかし、私のプロシージャはどれも文字列の入力/出力を持たず、4 バイトの整数と 8 バイトの double だけです。
Fortran 77 で最初に記述された DLL を変更する必要があります。将来の変更を容易にするために、DLL ソース コードを Fortran から VB.Net に変換したいと考えています。DLL を呼び出すプログラムを変更することはできません。また、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
基本的な論理ステートメントであるため、[ここに戻りのあるコード] は正しいと確信しています。ただし、Fortran の「共通」ステートメントを正しく処理しているかどうか、および「クラス」内に関数とサブルーチンを配置しても問題ないかどうかはわかりません...