最近拿到一个项目,用vb写的。安装了vb后,想编译运行看看。结果显示文件未找到:".DLL\A.dll"
查看了项目的当前目录下,但确实有一个DLL文件夹,里面有这个A.dll文件出错的语句如下:
 Call B_initial(tCard)这句之前有如下声明:
Declare Function B_initial Lib ".\DLL\A.dll" Alias "_A_open" (eCards As Integer) As Integer请问这种情况有谁遇到,可能是什么原因,要如何解决,谢谢

解决方案 »

  1.   

    将下面的文本粘贴到文本编辑器中,然后存为以.reg为扩展名的文件。双击后将信息添加到注册表中。然后用鼠标右键点击一个动态链接库或OCX控件,在弹出的环境菜单中你将会看到Register和Unregister的选项。运用这个方法的前提是你的计算机上必须有regsvr32.exe文件。
    REGEDIT4
    [HKEY_CLASSES_ROOT\.ocx]
    @="ocxfile"
    [HKEY_CLASSES_ROOT\ocxfile]
    @=”OCX”
    [HKEY_CLASSES_ROOT\ocxfile\shell\Register\command]
    @="RegSvr32 \"%1\""
    [HKEY_CLASSES_ROOT\ocxfile\shell\Unregister\command]
    @="RegSvr32 /u \"%1\"" 
    REGEDIT4
    [HKEY_CLASSES_ROOT\.dll]
    @="dllfile"
    [HKEY_CLASSES_ROOT\dllfile]
    @=”DLL”
    [HKEY_CLASSES_ROOT\dllfile\shell\Register\command]
    @="RegSvr32 \"%1\""
    [HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command]
    @="RegSvr32 /u \"%1\"" 
      

  2.   

    Declare Function B_initial Lib app.path & "\DLL\A.dll" Alias "_A_open" (eCards As Integer) As Integer
      

  3.   

    经测试有效的。将系统目录下的文件kernel32.dll拷贝到程序旁边的dll文件夹下。
    Private Declare Sub Sleep Lib "dll\kernel32.dll" (ByVal dwMilliseconds As Long)
    'Private Declare Sub Sleep Lib "dll\kernel32.dll" (ByVal dwMilliseconds As Long) '这样写也行Private Sub Form_Load()
        Sleep 2000
        MsgBox "ok"
    End Sub
    你再仔细检查下,建议不要直接在ide中运行。
      

  4.   

    ".\DLL\A.dll
    这个是一个错误的路径
      

  5.   

    上面代码有点忘了修改了。
    .\是可以的,在linux系统中./表示当前目录,应该是沿用过来的。各位花几分钟测试下吧,不要妄下结论。
    Private Declare Sub Sleep Lib ".\dll\kernel32.dll" (ByVal dwMilliseconds As Long)
    'Private Declare Sub Sleep Lib "dll\kernel32.dll" (ByVal dwMilliseconds As Long) '这样写也行Private Sub Form_Load()
        Sleep 2000
        MsgBox "ok"
    End Sub
      

  6.   

    该声明为这样:Declare Function B_initial Lib app.path & "A.dll" Alias "_A_open" (eCards As Integer) As Integer如果还是不行,就打开运行框,输入regsvr32加一个空格再加你的DLL路径,点击确定,如果提示成功,那十有八九就行了,例如我要注册在E盘的A.DLL文件,可以这样:
    regsvr32 E:\A.DLL
    先试一试吧。
      

  7.   

    在reference里出现把a.dll加回去。
      

  8.   

    标准dll不需要注册的吧?好像用regsvr32都会提示失败的。
    通过vb的引用就更不谈了,这个只是针对activex dll的。标准dll里面是一堆函数。
    activex dll里面基本就是几个类以及组成这些类的各个成员。
      

  9.   

    直接双击工程文件启动 VB。否则 VB 将把其安装路径作为当前路径。还有一个办法,将 DLL 文件复制到 Windows/system 下。
      

  10.   

    这是VB6的弱智表现之一 也可以算得上是bug之一
    先打开vb6.exe再打开工程时 app.path=vb6.exe所在路径
    直接打开工程文件时app.path=工程所在路径
    所以你用的相对路径".\DLL\A.dll"时 直接打开工程就好使,先开vb6.exe就会提示找不到dll
      

  11.   

    http://topic.csdn.net/u/20090309/16/2f607d2a-5dba-44d7-a333-188b73415533.html
    首先要明白原理,看这个帖子的1楼。
    其次当前目录是最不具有确定性的一个目录,即使你将 exe 和 dll 都放在期望的目录,我依旧可以通过快捷方式或命令行调用然你 exe 启动后的当前目录在其他地方。你非要用当前目录看这个帖子的3楼。又:这是整个系统的规则,与你用哪种语言开发根本毫无关系。
    要学会先从自己身上找问题,不要便秘了就怪地心引力太低。
      

  12.   

    感谢各位大大的帮忙,问题已解决,果然要要先用运行工程文件来打开vb,直接在vb里面打开工程会报错。谢谢各位,结贴
      

  13.   

    这是VB6的弱智表现之一 也可以算得上是bug之一害了无数人了
      

  14.   

    不同意 Tiger_Zhao 关于快捷方式会改变程序当前目录的观点
    经过调试确认,快捷方式启动后,app.path不受影响