我用fortran做了个DLL,用VB调用,可是编译成EXE文件后,
在某些机子上可以正常运行,而在某些电脑上却提示找不到DLL文件,是怎么回事?
我的DLL和EXE文件放在同一目录下的。

解决方案 »

  1.   

    Private Declare Sub add Lib "cal1.dll" (aa1 As Single, aa2 As Single, aa3 As Single, aa4 As Single)
    我是这样定义的。
      

  2.   

    有个经验也许能帮到你:DLL载入失败时,VB6也会报"找不到文件"......因此,你可以在有问题的机器上使用loadlibrary来载入一下DLL并使用getproaddress取add函数的地址,看看能否成功.如果失败了,检查一下DLL所需要的依存环境是否正常.比如你引用了别的对象,或者载入了别的组件.关键是你这个DLL的DllMain里面返回失败的条件是什么.注意一下那个条件.
      

  3.   

    我的DLL是我用fortran编写的一个函数,就是些计算代码,没有任何引用对象和载入任何组件,
    依存环境是否就应该没问题了??
      

  4.   

    在有问题的机器上使用loadlibrary来载入一下DLL并使用getproaddress取add函数的地址,看看能否成功
      

  5.   

    检查一下DLL所需要的依存环境是否正常----把dll拖到Dependency Walker里面~
      

  6.   

    loadlibrary函数还要装VB来使用,呜呜。
      

  7.   

    不用啊......你编译一个EXE,里面就声明个loadlibrary就行了然后用它加载你的DLL,把返回值检查一下即可知道问题的范围.为了方便API调试,你可以使用FormatMessage函数来对系统API返回值进行格式化:http://www.m5home.com/bbs/dispbbs.asp?boardid=28&Id=2509使用示例:       MsgBox GetRetMessage(53,FORMAT_MESSAGE_FROM_SYSTEM)                 显示:  找不到网络路径。        MsgBox GetRetMessage(0,FORMAT_MESSAGE_FROM_SYSTEM)                 显示:  操作成功完成。
    虽然简单,但对于API调试比较方便.
      

  8.   

    regsvr32.dll里面有个libraryload函数,我调用了一下我自己写的那个DLL,说找不到指定模块。
    我怀疑是不是我的VB程序打包的问题。
      

  9.   

    那看来你这个DLL初始化失败了你自己用LoadLibrary加载一下,用我上面给的函数检查一下返回值,看看具体原因是什么.
      

  10.   

    搞定了,呵呵。是fortran编译器的问题,谢谢大家的热心帮助,谢谢啦!!
      

  11.   

    Private Declare Sub add Lib "把你的路径写全一点比如 c:\programe files \ call\cal1.dll" (aa1 As Single, aa2 As Single, aa3 As Single, aa4 As Single) 
      

  12.   

    各位大侠,我也碰到了关于VB调用DLL文件问题,已发新帖。大家帮忙呀。