VB调用Fortran编译的dll,打包后在其他电脑上安装,运行后提示找不到所编译的dll文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB调用Fortran编译的dll,打包后在其他电脑上安装,运行后提示找不到所编译的dll文件相关的知识,希望对你有一定的参考价值。

VB调用Fortran编译的DLL文件,编译器为Inter visual Fortran,是32位dll,机器64位。
在自己电脑上直接运行或生成exe运行均没有问题,调用成功,结果正确。
用VB的自带工具Package&Deployment,将VB程序打成安装包,且包内含有VB程序运行所需要的Dll,并且加入了Fortran编译的dll,名为VSIE_VB.dll。
打包后在其他电脑上安装,安装后运行exe,但是却出现错误提示:找不到VSIE_VB.dll文件。在安装了VB和没有安装VB的电脑上均试验过,找不到Dll文件。
上网查询后发现可能还是缺少其他的Dll文件,但是不知道到底缺的是什么。
还是什么其他的原因?

这个问题困扰了我很久,马上就要答辩了!请各位大神帮忙~~万分感谢~~~感激不尽~~
补充一下 我用depends查看了dll文件 把它调用的其他dll文件都复制到了根目录下(是Inter visual fortran中的dll) 再次打包运行 依然显示无法找到VSIE_VB.dll 抓狂中!!!!

参考技术A 最简单的方法
把你 VSIE_VB.dll 放到你生成的exe目录
新建文件
写上
regsvr32.exe VSIE_VB.dll /s
另存为 注册.bat
bat也放在exe目录双击一次追问

请问新建文件是新建什么文件?在哪里新建?
是在其他的电脑上这么做吗?
这样的话VSIE_VB.dll所依赖的其他dll还需要复制过去吗?
万分感谢!

追答

新建一个.txt文件后缀改成.bat
regsvr32.exe XX.dll /s
regsvr32.exe XX1.dll /s
regsvr32.exe XX2.dll /s
XX改成你的dll名
有多少个dll就复制多少条改成dll名就行了
提示少哪个就复制哪个放到你生成的exe根目录
bat也放一起
在别的电脑上第一次先运行bat注册
以后就不用了

追问

谢谢你,但是注册时失败了,提示“模块加载失败,确保该二进制储存在指定的路径中,或调试它以检验该二进制或相关的DLL是否有问题”
将注册文件中的改为全路径和不加路径都试过。
另外我想问一下如果这个DLL用到的是在system32文件夹中的dll,那这些system32文件夹中的dll还需要复制并注册吗?

谢谢你啦

追答

用到的电脑system32里有这个dll就不用
或者你手动把用到的dll粘贴到system32目录吧..

CAD VBA调用VB编译的DLL问题

使用VB编译的DLL文件,在VBA中调用的时候,一般先需要进行设置(工具-引用-浏览-定位到dll文件),当我对程序进行打包安装到其他电脑上后,由于dll文件没有放在相应的位置,那么打开VBA工具-引用后,就会发现dll前面出现丢失,就需要重新设置一下,请问有没有什么办法让它安装后自动设置呢?
例如下图中的,DataQualityLibrary前方出现“丢失”

参考技术A 正常情况下,建议还是使用32位的office。但在特殊的情况下,你必须使用64位office。
那么64位的VBA如何调用32位的dll呢?
答案只有一个:用ActiveX.exe进行包装。在vb6中新建一个activeX.exe工程。
写下如下的代码:
Public Function CreateInstance(ProgID As String) As Object
Set CreateInstance = CreateObject(ProgID)
End Function
进行编译。
64位的VBA代码调用:
Set MyObj32 = CreateObject("MyActiveXExe.cCOM32").CreateInstance("SomeLib.SomeClass")
这样在64位vba中就可以使用32位的activeX.dll的类了。
注意:1、activeX.exe在使用中必须注册。32位的activeX.dll也得注册。
2、这样的调用dll,性能会下降得很厉害,因为这是两个进程间的调用。
3、调试会增加一些麻烦。
参考技术B 参考   回首时那短短的一瞬 参考技术C 安装程序的时候,有没有注册你的 DLL
如果可能的话,安装到系统目录下面本回答被提问者采纳

以上是关于VB调用Fortran编译的dll,打包后在其他电脑上安装,运行后提示找不到所编译的dll文件的主要内容,如果未能解决你的问题,请参考以下文章

CAD VBA调用VB编译的DLL问题

vb6打包后运行提示找不到dll文件

Matlab调用Fortran编译的DLL——未完待续

c#2005调试程序正常,生成了引用的dll文件,但是生成程序后在其他机器上使用,总是出现缺少程序集的错误

C++ 从 dll 调用 FORTRAN 子例程

混合编程:从 C++ 调用 FORTRAN