请问VB应该如何调用FORTRAN写的DLL文件?

Parasite_Eve 2015-09-10 05:25:47
如题,自己机子上有一个程序是用VB写的,外面有一个算法程序是用FORTRAN写的动态链接。现在VB想要调用FORTRAN写的那个DLL,但是无法加载。无论是用相对路径还是绝对路径Declare,程序都会提示找不到文件(就算把DLL文件与执行文件放在同一个文件夹下也不行),运行的时候会提示如下:

实时错误‘53’:
文件未找到: XXXX.DLL(XXXX.DLL为fortran所生成的动态链接文件)


请问论坛上有没有使用过VB调用FORTRAN生成的DLL文件的高手?我机子上没安装FORTRAN,请教一下是否是该 DLL文件的问题(包涵不完全),或者是我调用方法的问题,坐等,多谢。
...全文
730 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Parasite_Eve 2015-09-18
  • 打赏
  • 举报
回复
引用 9 楼 Chen8013 的回复:
[quote=引用 6 楼 Parasite_Eve 的回复:] [quote=引用 4 楼 Chen8013 的回复:] 很怀疑是因为楼主的API声明中,DLL文件名带了路径, 但“实际运行”的机子上,DLL文件的存放路径跟声明中的路径“不匹配”。
没有带路径,兄弟,我直接在模块里声明的: Public Declare Function icing Lib "ice_4.dll" (ByRef X() As Single, ByRef Y() As Single) As Single [/quote] 你现在的错误提示是“找不到文件”啊。 你确认那个DLL文件,放置的“位置”正确吗?还有就是运行程序的用户,有没有“读取文件”的权限? [/quote]这些肯定都是没问题的,我估计是他生成的"DLL“有问题, 不是一个完整的DLL包,应该还包涵了原来FORTRAN的一些库文件,这只有等我那个同事回来再说了。
舉杯邀明月 2015-09-15
  • 打赏
  • 举报
回复
引用 6 楼 Parasite_Eve 的回复:
[quote=引用 4 楼 Chen8013 的回复:] 很怀疑是因为楼主的API声明中,DLL文件名带了路径, 但“实际运行”的机子上,DLL文件的存放路径跟声明中的路径“不匹配”。
没有带路径,兄弟,我直接在模块里声明的: Public Declare Function icing Lib "ice_4.dll" (ByRef X() As Single, ByRef Y() As Single) As Single [/quote] 你现在的错误提示是“找不到文件”啊。 你确认那个DLL文件,放置的“位置”正确吗?还有就是运行程序的用户,有没有“读取文件”的权限?
of123 2015-09-14
  • 打赏
  • 举报
回复
你如果是调试运行,这样做:双击 vbp 文件直接在当前路径中打开工程。否则,将 DLL 文件在 VB 安装目录中复制一份。
Parasite_Eve 2015-09-14
  • 打赏
  • 举报
回复
引用 2 楼 of123 的回复:
与用什么写的没关系,要点是,它采用哪一种接口。 扩展名为 DLL 的动态库常见的有两类: 1 Windows API 常用的标准 DLL。它是通过声明函数来调用的。 2 COM DLL,这个要注册和引用。 你先确定是哪一种。 另外,找不到文件似乎很奇怪。看你的说法,好像是对第 1 种 DLL 的函数声明报错。你是怎么写的?
DLL文件是我同事用FORTRAN自动生成的,也不知道是不是还需要包涵FORTRAN的库。
Parasite_Eve 2015-09-14
  • 打赏
  • 举报
回复
引用 4 楼 Chen8013 的回复:
很怀疑是因为楼主的API声明中,DLL文件名带了路径, 但“实际运行”的机子上,DLL文件的存放路径跟声明中的路径“不匹配”。
没有带路径,兄弟,我直接在模块里声明的: Public Declare Function icing Lib "ice_4.dll" (ByRef X() As Single, ByRef Y() As Single) As Single
Parasite_Eve 2015-09-14
  • 打赏
  • 举报
回复
引用 2 楼 of123 的回复:
与用什么写的没关系,要点是,它采用哪一种接口。 扩展名为 DLL 的动态库常见的有两类: 1 Windows API 常用的标准 DLL。它是通过声明函数来调用的。 2 COM DLL,这个要注册和引用。 你先确定是哪一种。 另外,找不到文件似乎很奇怪。看你的说法,好像是对第 1 种 DLL 的函数声明报错。你是怎么写的?
没有写路径,我是直接在模块内引用的,源引用是这样写的 Public Declare Function icing Lib "ice_4.dll" (ByRef X() As Single, ByRef Y() As Single) As Single 其中ice_4.dll就是用Fortran写的DLL文件,主要是一个结冰分布算法,可能相对较为复杂,不太好直接转化到VB里来写,我就让同事直接做成DLL的形式来调用了。结果运化的时候一直提醒找不到文件。
舉杯邀明月 2015-09-11
  • 打赏
  • 举报
回复
很怀疑是因为楼主的API声明中,DLL文件名带了路径, 但“实际运行”的机子上,DLL文件的存放路径跟声明中的路径“不匹配”。
of123 2015-09-11
  • 打赏
  • 举报
回复
第 1 种动态库函数声明,文件名不要带路径,否则即便调通,在其他机器上也无法用。 系统会在下列路径下自动搜索: 1 exe 调用者所在路径 2 Windows\System 3 Windows\ 4 系统当前路径 5 PATH环境变量指定的
of123 2015-09-11
  • 打赏
  • 举报
回复
与用什么写的没关系,要点是,它采用哪一种接口。 扩展名为 DLL 的动态库常见的有两类: 1 Windows API 常用的标准 DLL。它是通过声明函数来调用的。 2 COM DLL,这个要注册和引用。 你先确定是哪一种。 另外,找不到文件似乎很奇怪。看你的说法,好像是对第 1 种 DLL 的函数声明报错。你是怎么写的?
QQ1092255408 2015-09-10
  • 打赏
  • 举报
回复
也许是权限问题

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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