回 帖 发 新 帖 刷新版面

主题:请教在Delphi中调用Fortran Dll出错问题

我在看彭国伦编的Fortran95时,尝试用Delphi调用Fortran编的Dll。但Delphi运行时候,总是提示‘无法定位程序输入点circle_area于动态链接库forlib.dll上’。我尝试把DLL放在Delphi文件下或加上Dll的路径,都未能解决。我想请教一下谁有遇到类似问题的,又怎样解决,谢谢了!
源程序:
  forlib.f90:
    real function circle_area(radius)
    !DEC$ ATTRIBUTES DLLEXPORT ::circle_area
    implicit none
    real raidus
    real, parameter ::pi=3.1415926
    circle_area=radius*radius*pi
    return
    end function
************************
Delphi:
  implementation
function circle_area(r:PSingle):Single;stdcall;external'forlib.dll';

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   a,s:single;
begin
    s:=StrtoFloat(edit1.Text);
    a:=circle_area(addr(s));
    edit1.Text:=floattostr(a);
end;

end.

回复列表 (共6个回复)

沙发

以前做过。
fortran定义DLL时要说明函数参数的传值方式:值传递还是地址传递。
函数的参数使用什么顺序 STDCALL ,还是C?
cDEC$ ATTRIBUTES C :: object [, object] ...
cDEC$ ATTRIBUTES STDCALL :: object [, object] 
定义好DLL后最好再用DLL函数查看器(Depends) 看一下DLL的名字是否是你定义的.
在Delphi中也要对导入的函数做一样的申明,数据结构要想同。四字节对应四字节的 ,八字节对应八字节的。
single 对 float 
double 对double。
Delph好久不用了可能不太准确。

板凳

我这有两篇介绍Delphi调用fortranDLL的文章,需要的话可以发给你,留下你的e-mail

3 楼


sysuzouhongyue@126.com

 谢谢!

4 楼

请给我也发一份我的邮箱为zhu_wanli@vip.163.com

5 楼

感觉Delphi正在日渐衰落啊!

6 楼


trimtrim:请您给我也发一份,谢谢!songzj1026@126.com!

我来回复

您尚未登录,请登录后再回复。点此登录或注册