各位大侠,小弟用VB做了一个自定义控件,又在自定义控件中调用了自己做的DLL。然后我做了一个程序引入了自定义控件。最开始我把所有控件需要用到的和DLL需要用到的文件都和使用控件的程序放在同一个目录里,控件的一切功能都已经调试通过。现在我想要把控件和DLL以及它们用到的文件放在一个目录下面,使用控件的程序以及程序使用的除控件外的其他程序放在另一个目录下面,结果使用控件方法的过程中,只要使用到了DLL提供的方法,使用控件的程序就提示这个DLL文件找不到。我想这应该是因为程序使用了控件后,其实控件中调用的DLL就是程序在调用,所以DLL文件的位置在程序目录下面而不是控件目录下面,可是有没有什么方法可以解决这种情况呢?或者如果使用自定义控件不行,还可以使用什么技术实现和控件同样的效果又可以使DLL的位置在我指定的位置呢?希望各位指教!

解决方案 »

  1.   


    你可以将文件放在 3、4 两个目录中,或者将路径加到 PATH 环境变量中。
      

  2.   

    您所说的的确是不错的方法,不过3、4这两种方法不好用,因为自己的自定义DLL用到了很多文件,放到系统盘给人感觉不好,环境变量的方法倒是值得试一下,但是最怕现在用受限用户管理计算机的很多,而用户的限制可能造成环境变量禁止设置,如果客户可以接受的话,这种方法是可以的。希望还有更通用的方法。
    等待3天,如果没有更好的方案,我就结贴给您分数吧,谢谢您!
      

  3.   

    从第 2 点引申,比较变态的方法就是变更当前目录:
    1)记录当前目录
    2)变更当前目录到dll所在目录
    3)调用dll函数
    4)回复当前目录
    前提是你的函数功能与当前目录无关
      

  4.   

    大哥,多谢指教,另小弟茅塞顿开。用环境变量我试了,但是静态声明DLL函数时,不知道怎么加入环境变量,不加没有效果,还是找不到DLL文件。然后我现在使用改变当前目录的方法,是可以的,我现在要反复实验这样做是否会影响调用程序的正常使用,如果没有问题,那么就采用这种方法了。我结贴给分了,希望您以后继续赐教,谢谢。
      

  5.   

    VB对DLL的调用隐藏了很多东西,如果是通过双击工程文件打开,那么对DLL路径的查找顺序是:EXE文件所在的目录、当前目录、WINDOWS系统目录(通常为\Windows\System)、WINDOWS目录、PATH环境变量中的目录。可是如果先打开VB编程环境,然后从“文件”-〉“打开”这种方式打开工程的话,就需要引用DLL的绝对路径。
    至于为什么,我也不是太清楚。
      

  6.   

    我遇见的也是这么一样  调用DLL 直接外部程序消失了但是生成EXE 是正常的