2

核心问题:如果我不能从调用程序中改变调用程序,我还能将一个DLL的原始源代码从Fortran 77翻译成VB.Net吗?即,是否可以使用 VB.NET 编写的 DLL 的行为与其最初用 Fortran 77 编写的源代码相同?

我知道我会遇到字符串问题。但我的程序都没有字符串的输入/输出,只有 4 字节整数和 8 字节双精度。

我必须修改最初用 Fortran 77 编写的 DLL。为了使将来的任何更改更容易,我想将 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

我非常有信心 [code in here w/return] 是正确的,因为它是基本的逻辑语句。但是,我不确定我是否正确处理了 Fortran“通用”语句,以及是否可以在“类”中包含函数和子例程......

4

1 回答 1

0

我认为答案是“你不能这样做”。据我所知,您显示的 DLL 通过更改公共块中的变量将信息返回到主程序。但是.NET 没有。

于 2013-09-16T18:27:30.547 回答