问题1:
    用vc编写dll时,连接器根据导出的变量或者函数,自动生成*.lib文件,但是好像不生成*.h文件,是不是这样?是不是要手工生成*.h文件? 
问题2:
    在使用*.dll工程中(引用*.dll),采用隐式连接时是不是需要*.h文件?
问题3:
    在使用*.dll时,如何把*.dll静态连接到*.exe文件中?,而使运行*.exe文件时,不需要*.dll文件。    

解决方案 »

  1.   

    隐式链接,不需要h文件
    在setting的c/c++中设定MT
      

  2.   

    问题1 .h文件要自己手动编写的 
    问题2 隐式调用dll不需要.h也不需要.lib
    问题3 显式调用dll的时候,编译的时候需要.h和.lib,编译成功exe后,也就是运行exe时是不需要.h和.lib的,但是要把.dll和exe放在同一个目录下面,或者把.dll放在系统目录下面
    比如 win98放在 c:\windows98\system , win2000放在c:\winnt\system32,(假设系统安装在c盘),都是可以的。
      

  3.   

    补充说明: 虽然隐式调用dll编译的时候不需要.h和.lib文件,但是你必须知道dll内部的函数是如何定义的,函数名称函数参数类型等必须知道才可以
      

  4.   

    对楼上的各位 表示深深的感谢!但是,对大家容易犯的错误理解,显示连接和隐式连接更正一下:
        dll的显示连接,是通过LoadLibray(),对dll的使用,
    不需要.h和.lib文件
        dll的隐式连接,是通过.lib来使用dll的另外,如果.h文件需要自己手动编写的,如何编写?
    大的 dll的.h文件编写的时候可比较麻烦,
    而且如果写错的话,如何检查错误?(如何保证正确)
      

  5.   

    我做了个Dll文件,在里面输出了如下的两个函数,调用时VC的自动提示能够发现它,但为什么会出现这样的连接错误?
    Linking...
    g.obj : error LNK2001: unresolved external symbol "int __stdcall UninstallHook(void)" (?UninstallHook@@YGHXZ)
    g.obj : error LNK2001: unresolved external symbol "int __stdcall InstallHook(void)" (?InstallHook@@YGHXZ)
    LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
    Debug/g.exe : fatal error LNK1120: 3 unresolved externals
    Error executing link.exe.
      

  6.   

    对于连接错误
    Linking...
    g.obj : error LNK2001: unresolved external symbol "int __stdcall UninstallHook(void)" (?UninstallHook@@YGHXZ)
    那是你没有在工程中加入了lib文件.问题1:
        用VC编写的dll, 对于输出函数, 那个*.h文件你可以手工生成, 也可以有你创建这个dll工程时有类向导生成的.
    问题2:
        隐士连接时不需要dll文件的
    问题3:
        当你的lib文件中没有dllexport那些函数时, 静态连接到exe后, 不需要*.dll文件。