Visual studio 2010 找不到入口点Fortran Dll
继续关于dll的最后一个未解决的问题,我尝试使用g95和以下命令创建fortran dll:Visual studio 2010 找不到入口点Fortran Dll,visual-studio-2010,dll,fortran,entry-point,Visual Studio 2010,Dll,Fortran,Entry Point,继续关于dll的最后一个未解决的问题,我尝试使用g95和以下命令创建fortran dll: g95-c FCall.f90 g95-shared-mrtd-o FCall.dll FCall.o 当我将它链接到VB时,它显示“在DLL‘C:\Users\Hp\Documents\Visual Studio 2010\Projects\WindowsApplication5\WindowsApplication5\FCall.DLL’中找不到名为‘FortranCall’的入口点。” 以下是FO
g95-c FCall.f90
g95-shared-mrtd-o FCall.dll FCall.o
当我将它链接到VB时,它显示“在DLL‘C:\Users\Hp\Documents\Visual Studio 2010\Projects\WindowsApplication5\WindowsApplication5\FCall.DLL’中找不到名为‘FortranCall’的入口点。”
以下是FORTRAN代码:
SUBROUTINE FortranCall (r1, num)
!DEC$ ATTRIBUTES DLLEXPORT :: FortranCall
!DEC$ ATTRIBUTES ALIAS:'FortranCall' :: FortranCall
REAL,INTENT(IN) :: r1
REAL,INTENT(OUT) :: num
num = MOD (r1, 256.0)
END SUBROUTINE
下面是VB代码:
Private Sub Command1_Click()
r1 = 456.78
Call FortranCall(r1, Num)
Text1.Text = Str$(Num)
End Sub
VB中的模块代码:
声明子FortranCall Lib“C:\Users\Hp\Documents\visualstudio 2010\Projects\WindowsApplication5\WindowsApplication5\FCall.dll”
(r1为单个,Num为单个)
G95是否有自己的export语句从dll导出函数?
在此子例程中,导出属性(!DEC$ATTRIBUTES DLLEXPORT::FortranCall)在visual fortran中使用。您使用的指令非常特定于编译器。甚至连名字都表明它是DEC编译器(及其后代——康柏和英特尔)特有的 Gfortran也有同样的功能,但是有
$GCC,但不是G95
我强烈建议您使用Fortran 2003功能bind(C,name=“name”)
来设置符号名。另请参见标签
默认情况下,GCC和G95都会导出符号,因此无需使用dllexport
指令,但将其保留在英特尔Fortran中
或者,您可以尝试使用选项-fno下划线
,但这同样是g95特有的,不能与其他编译器一起使用。您使用的指令是编译器特有的。甚至连名字都表明它是DEC编译器(及其后代——康柏和英特尔)特有的
Gfortran也有同样的功能,但是有$GCC,但不是G95
我强烈建议您使用Fortran 2003功能bind(C,name=“name”)
来设置符号名。另请参见标签
默认情况下,GCC和G95都会导出符号,因此无需使用dllexport
指令,但将其保留在英特尔Fortran中
或者,您可以尝试使用选项-fno下划线
,但该选项同样适用于g95,不能用于其他编译器。请尝试了解如何使用编辑框中的格式设置。剩下的我们会帮你,但至少尝试一下。好吧,或者只是发现总有人非常渴望从编辑中获得+2(@Blubberguy22),他会一直为你做。谢谢你,很抱歉,我仍然不知道如何在编辑框中使用格式。但我会找出并在下一个问题中使用它谢谢Sergio的编辑请尝试找出如何使用编辑框中的格式。剩下的我们会帮你,但至少尝试一下。好吧,或者只是发现总有人非常渴望从编辑中获得+2(@Blubberguy22),他会一直为你做。谢谢你,很抱歉,我仍然不知道如何在编辑框中使用格式。但我会找到答案,并用它来回答下一个问题。谢谢塞尔吉奥编辑了《为迟来的回应而担忧》。我已经使用上述指令创建了dll。我还尝试使用英特尔visual fortran和visual studio 2008创建dll。但当VB调用该函数时,两种方法都会显示以下错误消息:“试图读取或写入受保护的内存。这通常表示其他内存已损坏”。我不知道如何解决这个问题。你有什么建议吗?谢天谢地,这信息太少,无法诊断任何事情。我不懂VB,但请尝试将ByRef
添加到子原型中。谢谢。这在VB 2008中是可行的,但在VB 2010中,它仍然存在一个问题,可能会开始一个新的问题,我认为原来的问题已经解决了。我再也帮不了你了。包括一些有意义的描述,“有问题”什么也说不出来。现在,我认为用VB 2008进行项目工作已经足够了。我认为VB 2010中的错误会产生更广泛的问题。所以,我不得不问一个新问题。很抱歉,我的回答太晚了。我已经使用上述指令创建了dll。我还尝试使用英特尔visual fortran和visual studio 2008创建dll。但当VB调用该函数时,两种方法都会显示以下错误消息:“试图读取或写入受保护的内存。这通常表示其他内存已损坏”。我不知道如何解决这个问题。你有什么建议吗?谢天谢地,这信息太少,无法诊断任何事情。我不懂VB,但请尝试将ByRef
添加到子原型中。谢谢。这在VB 2008中是可行的,但在VB 2010中,它仍然存在一个问题,可能会开始一个新的问题,我认为原来的问题已经解决了。我再也帮不了你了。包括一些有意义的描述,“有问题”什么也说不出来。现在,我认为用VB 2008进行项目工作已经足够了。我认为VB 2010中的错误会产生更广泛的问题。所以,我不得不问一个新问题。
SUBROUTINE FortranCall (r1, num) bind(C,name="FortranCall")
!DEC$ ATTRIBUTES DLLEXPORT :: FortranCall
END SUBROUTINE