想看看lib,dll,所以搜索了一些帖子看了看,关于一些问题还不是很明白。
我提出来,希望大家看看,我相信对初学的朋友是有好处的。
(不说明就是在vc++6中)1 怎么制造 lib 文件?  File->New...->Projects->Win32 Static Library 
  填Project name..
  有一个复选框,随便你填不填。
  然后加一个 class,build,看看你的文件夹里多了什么?
  是一个 *.lib文件,大公告成。2 怎么使用 lib文件?
  需要头文件和lib文件。
  举例:a.h,a.lib
    在使用lib的 project里面。
  //新建一个 a.h, copy your a.h file to a.h
  //a.cpp
  #pragma comment(lib, "a.lib") //连接 a 库
  
3 怎么制造 dll?
  File->New...->Projects-> 你有两种选择 1 MFC AppWizard(dll)
                                       2 Win32 Dynamic_Link Library  然后 build,找一下,现在应该有了 a.dll ,还有 a.lib.   如果你要使用 a.dll,最好别忘了还得做点别的。
  一个 *.def 文件(文件怎么做,请搜索一下这个论坛,比较容易,如果有人回贴说不
  会,我会加上来的)。4 怎么使用 dll?
  问题来了,我也不是很清楚,我知道的一种是这样的。  在使用的时候 ::LoadLibrary()
  算了,还是让大家看看实例,是 MSDN 中的。
  使用应该是比较简单的,但也许实际情况并不是很简单。学习中......#include <stdio.h> 
#include <windows.h> 
 
typedef VOID (*MYPROC)(LPTSTR); 
 
VOID main(VOID) 

    HINSTANCE hinstLib; 
    MYPROC ProcAdd; 
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 
 
    // Get a handle to the DLL module.
 
    hinstLib = LoadLibrary("myputs"); 
 
    // If the handle is valid, try to get the function address.
 
    if (hinstLib != NULL) 
    { 
        ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); 
 
        // If the function address is valid, call the function.
 
        if (fRunTimeLinkSuccess = (ProcAdd != NULL)) 
            (ProcAdd) ("message via DLL function\n"); 
 
        // Free the DLL module.
 
        fFreeResult = FreeLibrary(hinstLib); 
    } 
 
    // If unable to call the DLL function, use an alternative.
 
    if (! fRunTimeLinkSuccess) 
        printf("message via alternative method\n"); 

  我的问题:
愿意解答的朋友随便说说。1 如果我没有头文件的话,也没有函数的参数形式,那么我是调用不了dll的。
  也就是说,需要头文件,这个我可以理解,但我在搜索的帖子中,怎么一些人说不需要
  头文件调用dll呢?
  怎么调用?
2 隐式和显示我还不清楚。就这些吧。谢谢你进来。

解决方案 »

  1.   

    不需要头文件的调用就是loadlibrary..动态连接
    加入lib和,h就是静态连接了
      

  2.   

    没错,4使用LoadLibrary函数时,只要知道.dll的路径,称为动态加载,不必使用.h文件。你列出的1和2两种情形是等价的,是静态加载。都需要使用.h文件。3中讲你构造dll时,可以使用MFC框架来做,也可以使用Win32直接来实现。只要生成了.dll,总会生成一个同名的.lib。如果生成的dll名字为a.dll,自然生成的lib就是a.lib。.def文件内是dll公布出来的函数声明,只有在.def内声明了,调用时,才可以使用这个函数。
      

  3.   

    to zhouyong0371我明白动态加载就是在需要的时候才加载到进程的内存空间,那我现在给一个 a.dll,a.lib,
    你怎么使用dll里面的函数呢?你可以得到函数的指针,但是,你怎么调用函数呢?
    比如 int (* pFunc)(int);你现在知道了 函数的地址 pFunc = 0x10008080,那你怎么调用?
    我就是这点不明白,前提是你没有 a.h
      

  4.   


    生成DLL时一般会同时生成一个LIB,不过此LIB和生成静态库时的LIB不一样。
    只是用于项目连接。如果你要使用一个DLL,可以:LoadLibrary,然后取函数地址,调用。例如你所说的pFunc可以这样调用:pFunc(999)另外一种方法就是和用静态库类似,连接那个LIB库。运行时还需要DLL。你可以
    看看VC向导生成的MFC项目,缺省情况就是动态连接MFC的。建议看看DSP文件的内容,不难。参考一下MSDN吧,一旦你弄明白了DSP文件,
    项目设置就不会再困扰你了。
      

  5.   

    DSP ?use UltraEdit?thanks , i will try.
      

  6.   

    lib有两种
    随dll生成的
    还有静态库调用dll的时候,需要lib时候也需要h,也就是静态链接,也就是隐式;
    不需要lib的时候,就是动态链接,LoadLibrary(),就是显式;
    这里说的lib是随dll生成的……
      

  7.   

    thanks you rivershan.为什么有人说不需要头文件?有人说需要头文件?奇怪,我明白你的意思。求证一下:
    1 “调用dll的时候,需要lib时候也需要h,也就是静态链接,也就是隐式;”
       怎么使用?如果不使用 LoadLibrary(),是设置在编译的选项里面吗?2  “不需要lib的时候,就是动态链接,LoadLibrary(),就是显式;”
      需要头文件吗?
      

  8.   

    1、在编译器选项里加lib,然后添加相应h文件。光加h的话,会提示找不到函数
    2、不需要,只需要一个dll
      

  9.   

    thanks everybody.good night.