还是那个VB调用FORTRAN的问题。。。求帮忙。
你好,放假前那个问题我还是没有解决,麻烦你给看一下SUBROUTINEARRAYTEST(n,arr)INTEGERn,i,jREAL(4)arr(3,3)DOi=1,3...
你好,放假前那个问题我还是没有解决,麻烦你给看一下
SUBROUTINE ARRAYTEST(n,arr)
INTEGER n,i,j
REAL(4) arr(3,3)
DO i=1,3
DO j=1,3
arr(i,j)=10.1*i+j
END DO
END DO
n=n+10
END SUBROUTINE
1.如果
FORTRAN声明:!DEC$ ATTRIBUTES DLLEXPORT, ALIAS:'ARRAYTEST' :: ARRAYTEST
VB声明:Private Declare Sub ARRAYTEST Lib "C:\Users\YU\Documents\FORTRAN\EXAM\EXAM\Release\EXAM.dll" Alias "_ARRAYTEST@8" (X As Long, Y As Single)
结果:DLL导出ARRAYTEST,VB会提示 找不到DLL入口点 _ARRAYTEST@8 in "文件路径"
2.如果FORTRAN声明不变
VB声明:Private Declare Sub ARRAYTEST Lib "C:\Users\YU\Documents\FORTRAN\EXAM\EXAM\Release\EXAM.dll" (X As Long, Y As Single)
结果:DLL导出ARRAYTEST,VB会提示 DLL调用约定错误
3.如果
FORTRAN声明:!DEC$ ATTRIBUTES DLLEXPORT, ALIAS:'_ARRAYTEST@8' :: ARRAYTEST
VB声明:Private Declare Sub ARRAYTEST Lib "C:\Users\YU\Documents\FORTRAN\EXAM\EXAM\Release\EXAM.dll" (X As Long, Y As Single)
结果:DLL导出 _ARRAYTEST@8,VB会提示 找不到DLL入口点 ARRAYTEST in "文件路径"
也就是导出ARRAYTEST和导出_ARRAYTEST@8都没有调用成功。
求帮忙看下问题出在哪里?
VS会自动修改DLL函数名吗? 展开
SUBROUTINE ARRAYTEST(n,arr)
INTEGER n,i,j
REAL(4) arr(3,3)
DO i=1,3
DO j=1,3
arr(i,j)=10.1*i+j
END DO
END DO
n=n+10
END SUBROUTINE
1.如果
FORTRAN声明:!DEC$ ATTRIBUTES DLLEXPORT, ALIAS:'ARRAYTEST' :: ARRAYTEST
VB声明:Private Declare Sub ARRAYTEST Lib "C:\Users\YU\Documents\FORTRAN\EXAM\EXAM\Release\EXAM.dll" Alias "_ARRAYTEST@8" (X As Long, Y As Single)
结果:DLL导出ARRAYTEST,VB会提示 找不到DLL入口点 _ARRAYTEST@8 in "文件路径"
2.如果FORTRAN声明不变
VB声明:Private Declare Sub ARRAYTEST Lib "C:\Users\YU\Documents\FORTRAN\EXAM\EXAM\Release\EXAM.dll" (X As Long, Y As Single)
结果:DLL导出ARRAYTEST,VB会提示 DLL调用约定错误
3.如果
FORTRAN声明:!DEC$ ATTRIBUTES DLLEXPORT, ALIAS:'_ARRAYTEST@8' :: ARRAYTEST
VB声明:Private Declare Sub ARRAYTEST Lib "C:\Users\YU\Documents\FORTRAN\EXAM\EXAM\Release\EXAM.dll" (X As Long, Y As Single)
结果:DLL导出 _ARRAYTEST@8,VB会提示 找不到DLL入口点 ARRAYTEST in "文件路径"
也就是导出ARRAYTEST和导出_ARRAYTEST@8都没有调用成功。
求帮忙看下问题出在哪里?
VS会自动修改DLL函数名吗? 展开
展开全部
我不是很懂VB
不管是 _ARRAYTEST@8 还是 ARRAYTEST 都可以工作,只要约定一样就可以。
如果提示找不到DLL入口点,说明第二条的约定不同。改成一样的约定就可以了。
如果提示调用约定错误。可设定函数为 stdcall 约定。具体 Fortran 和 VB 的设置方法,你可参考彭国伦的《Fortran95程序设计》,某混编章节。
VS不会修改DLL函数名,它只是个外壳而已。它不是编译器,你一定要弄清楚它的角色。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询