还是那个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函数名吗?
展开
 我来答
天河流纹石
2014-05-06 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7624
采纳率:76%
帮助的人:4052万
展开全部
  1. 我不是很懂VB

  2. 不管是 _ARRAYTEST@8 还是 ARRAYTEST 都可以工作,只要约定一样就可以。

  3. 如果提示找不到DLL入口点,说明第二条的约定不同。改成一样的约定就可以了。

  4. 如果提示调用约定错误。可设定函数为 stdcall 约定。具体 Fortran 和 VB 的设置方法,你可参考彭国伦的《Fortran95程序设计》,某混编章节。

  5. VS不会修改DLL函数名,它只是个外壳而已。它不是编译器,你一定要弄清楚它的角色。

来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式