这里真的没有人作过这个么????,我的上一个问题给了200多分,解决了的话都给你

lifei 2001-04-15 01:52:00
我把fortran作成dll,用C调用
fortran格式如下用的是visual fortan5.0A
输入数组为 pnt is the inupt point x,y;ndata is the point amount
! ncont is the contour amount ;cont store the contour number
下 为输出
! output :: xx1,yy1 is the first group and xx2,yy2 is the second
! group ;xyid is the point amount ; last the lines must be
dll程序:
SUBROUTINE ACORD(pnt,ndata,ncont,cont,xx1,yy1,xx2,yy2,xyid)
!DEC$ ATTRIBUTES DLLEXPORT :: ACORD
!DEC$ ATTRIBUTES VALUE :: ndata,ncont,xyid
!DEC$ ATTRIBUTES REFERENCE :: pnt,cont,xx1,yy1,xx2,yy2
INTEGER(4) iseed
REAL(4) rnum,xx1(2401),yy1(2401),xx2(2401),yy2(2401)
REAL(4) PNT(1203,3), TETR(2401,3), XPNT(3,3), CONT(50), DET(2,3)
INTEGER(4) ITETR(2401,3), ISTACK(2401), KTETR(50,2), ITEMP(3,2)
integer(4) ndata
CHARACTER*32 FORM
.......

END SUBROUTINE
但是传值总是不对,后来在vb里也试了,单个的变量可以,可是数组总是不对,fortra缺省的是按照地址传,就是reference,应该没问题,就连数组在内存里的排列也考虑了,还是不行,后来我干脆倒退一步,作成一个伪dll,其实只是把fortran的主程序改为subroutine,输入输出不变,由dll去读写文件,并输出到文件里,不传入任何参数也不传回任何参数,只是调一个ACORD(VOID)结果调试的时候还是死了,不知道是什么毛病,那位大虾作过类似的指点一下
...全文
211 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jmylf 2001-05-21
  • 打赏
  • 举报
回复
你的问题我作过,有两种解决方法,作成DLL,在里面进行读写文件操作,或者干脆作成可执行,在BCB里用调waitobject 和单步执行可以实现.其中我试过,可能是数组的排列方式不对,主要是传递方式不太好解决,fortran是按地址或者按值都可以,要在DLl里指定,C和VB是按地址的.其中向VB传数组,帮助上说只要传递第一个值就可以,我试过,一维的可以,多维的就不行了,这方面我们可以一起研究一下.
ginkgoboy 2001-05-21
  • 打赏
  • 举报
回复
我N年前学过FORTRAN77
ldr 2001-05-21
  • 打赏
  • 举报
回复
真的?
lifei 2001-04-18
  • 打赏
  • 举报
回复
看来连400分都送不出去,干脆见者有分算了
lifei 2001-04-16
  • 打赏
  • 举报
回复
真没人作过么?
lifei 2001-04-16
  • 打赏
  • 举报
回复
你说的是看谁的汇编 代码,这个dll是我自己写的呀,前面写的是调用的声明
lifei 2001-04-16
  • 打赏
  • 举报
回复
没有搞计算的同行么/
lifei 2001-04-16
  • 打赏
  • 举报
回复
看来这里真的没有同道之人,还是走了算了
wzg_harbin 2001-04-16
  • 打赏
  • 举报
回复
fortran是什么东西
singlerace 2001-04-15
  • 打赏
  • 举报
回复
看看他的汇编代码。或者用FORTRAN写一个简单点的试验代码,先弄清楚调用过程再说
lifei 2001-04-15
  • 打赏
  • 举报
回复
参数进栈应该没问题,我开始用c调,后来我哥们说vb的数组是和fortran相同的,传了几次还是数组出毛病,没办法,只好作成在dll里读写文件,调用的函数是 void function(void)其实就跟可执行文件差不多,我和我哥们都觉得这样和可执行文件没什么分别,而且影响速度,我们这个是离散点分析等值线的模块,测试用的是51个点,分析11条等值线,没有平滑,看不出速度,如果点数增加,估计大量的i/o肯定影响速度,所以在这里求救了另外ytweiwei(weiwei),你说的我帮你是指什么,我们可以讨论一下
Tasehouny 2001-04-15
  • 打赏
  • 举报
回复
写DLL的时候要注意,要注意参数传递的进栈顺序,FORTRAN我没有用过,但C写DLL用于其他语言调用时一定要注意这个。

例如:
extern "C" BOOL PASCAL EXPORT ExportedFunction()
{
.....
}
要指定导出调用的形式
ytweiwei 2001-04-15
  • 打赏
  • 举报
回复
我帮你,你也帮我吧
lifei 2001-04-15
  • 打赏
  • 举报
回复
看来这次这400多分又白费了
lifei 2001-04-15
  • 打赏
  • 举报
回复
忘了说,我的上一个问题在
http://www.csdn.net/expert/topic/95/95805.shtm
没有给出具体调用过程,给了200多分.那位解决的话到这里拿分就行了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧