我用vb做的主程序要调用别人用vc做的dll,我听别人说“调用dll完成计算以后需要释放dll,否则会使得dll逐渐吞噬内存,导致机器变慢。”我对dll不熟,我觉得这个这个说法好像与我以前了解到的dll的知识说法不是很一致。而且我觉得我的程序好像只是申明了dll,及其里面的函数,就可以使用了,没有看见有什么地方有专门的加载dll的语句啊?!如果需要释放dll,该如何释放了?
特此请教各位高手!

解决方案 »

  1.   

    加载用LoadLibrary
    释放用FreeLibrary
      

  2.   

    要看你的dll是什么类型了
    1。Win32 Dynamic-Link Library方式创建Non-MFC DLL动态链接库
    2。MFC AppWizard[dll]方式生成常规/扩展DLL前者相当于win32 api,在你第一次使用它的某个函数的时候进行加载,程序退出它退出。不用LoadLibrary
    后者是要用LoadLibrary和FreeLibrary随时加载和释放的
      

  3.   

    VB如果不是用LoadLibrary加载的(其实一般不用动态加载,vb不支持函数指针),不用FreeLierary,至于内存占用,要看DLL怎么写了。
      

  4.   

    我的dll是用Win32 Dynamic-Link Library方式创建Non-MFC DLL动态链接库。doodu的意思是否是说在vb中使用这个dll不会出现上面所说的逐渐吞噬内存的情况?
    还有,我刚才试了一下,vb中好像没有LoadLibrary和FreeLibrary这两个保留字啊?!
      

  5.   

    LoadLibrary和FreeLibrary都是api函数
    你可以查询msdn啊
      

  6.   

    VB中可以用API函数LoadLibrary,也可以用GetProcAddress,但是没有强制类型转换为函数的指针,不过有人用写机器码的方法实现,实在是太麻烦了!所以说,VB很少用LOadLibrary加载函数,而是事先申明函数,用Declare关键字。
      

  7.   

    dll逐渐吞噬内存
    ============
    这个是不可能的,只加载一次的,逐渐吞噬内存只能说明你的dll写的有问题,仔细检查下。
      

  8.   

    呵呵,可能我说的不太清楚。
    我在做主程序,是用vb做的,但是其中要用到一个dll,是vc做的。这个dll是用Win32 Dynamic-Link Library方式创建Non-MFC DLL动态链接库。使用这个dll的时候我并没有用到LoadLibrary和FreeLibrary。我仅仅Declare了这个dll和它内部的函数,就可以使用了。从我测试这个的dll的情况来看,并没有出现因为不释放dll,内存资源逐渐减少而导致机器速度变慢的情况。但是由于我测试的时间不长,本身dll也不大。所以我不敢确定是否不释放dll的话会导致可用内存减少,机器速度变慢的情况,所以想请教一下各位高手是否会因为不释放dll而会出现机器变慢的情况。本来从我所了解的dll的知识来看,我也认为dll在程序中只加载了一次。但是那个做dll的人她不相信我的话,而我也没有确定的把握,所以来这里求助!
      

  9.   

    各位老大讨论的结果为何没有定论?在vb调用vc写的dll的时候是否会出现因为多次加载dll,最后导致可用内存减少,机器速度变慢的情况?