none
关于VC调用DLL的问题 RRS feed

  • 问题

  • 今天看到VC调用的例子 int StartPro(LPCTSTR str, LPCTSTR Pwd)

     

    但是VB就有 Public Declare Function Skin_Attach Lib "Start.DLL" () As Long

     

    发现没有 调用的 DLL 这个DLL 是 Start.DLL  请问下  在VC中不需要指定是哪个DLL 只需要说明 命令和参数就可以了啊?
    2008年12月3日 14:32

答案

  • 需要静态链接编译DLL时产生的lib文件。
    2008年12月3日 17:20
    版主
  •  

    VC的工程可以使用SDK的方式来引用动态链接库,

     

    编译时包含相应的头文件, 项目依赖中加入相应的Lib文件,

    这样就可以直接使用它的所有的导出函数,

    编译完成后,程序就直接到对应的DLL中获取.

     

    这是跟VB和C#不同的地方

    2008年12月4日 1:21
    版主
  • 关于VC与DLL的编程可以参看下面文章:

    http://www.joyvc.cn/ComponentDevelop/ComponentDevelopGroup00121.html

    2008年12月4日 9:01
    版主
  •  

    哼……你的问题是由于一个很古老的决定,很久很久以前,计算机还在只有很少内存的时代,有两个骑着牛的人士(中国人称之为牛人,外国人叫他骑士)在设计C和C++的时候,决定他们的编译器在编译C++程序的时候,每次只处理一个C++源文件--因为占用的内存会少一些,这就是为什么你要在C++源代码里面加上那么多的头文件--告诉我们可怜的C++编译器那些函数和变量是在别的C++源文件里面定义的。C++编译器为每一个源文件生成一个.obj文件,对于其他源文件中定义的函数,C++在.obj文件中直接放入调用的函数名,而链接器读取这些.obj文件,将所有.obj里面未解决的函数调用转换成对应的函数地址--毕竟我们的CPU是一个老实人,它除了数字以外不能处理任何其他数据--例如字符串。

     

    因此对于.dll文件,链接器需要.lib文件告诉它函数名和函数地址之间的对应关系。

    2008年12月5日 11:07

全部回复

  • 需要静态链接编译DLL时产生的lib文件。
    2008年12月3日 17:20
    版主
  •  

    VC的工程可以使用SDK的方式来引用动态链接库,

     

    编译时包含相应的头文件, 项目依赖中加入相应的Lib文件,

    这样就可以直接使用它的所有的导出函数,

    编译完成后,程序就直接到对应的DLL中获取.

     

    这是跟VB和C#不同的地方

    2008年12月4日 1:21
    版主
  • 关于VC与DLL的编程可以参看下面文章:

    http://www.joyvc.cn/ComponentDevelop/ComponentDevelopGroup00121.html

    2008年12月4日 9:01
    版主
  •  

    哼……你的问题是由于一个很古老的决定,很久很久以前,计算机还在只有很少内存的时代,有两个骑着牛的人士(中国人称之为牛人,外国人叫他骑士)在设计C和C++的时候,决定他们的编译器在编译C++程序的时候,每次只处理一个C++源文件--因为占用的内存会少一些,这就是为什么你要在C++源代码里面加上那么多的头文件--告诉我们可怜的C++编译器那些函数和变量是在别的C++源文件里面定义的。C++编译器为每一个源文件生成一个.obj文件,对于其他源文件中定义的函数,C++在.obj文件中直接放入调用的函数名,而链接器读取这些.obj文件,将所有.obj里面未解决的函数调用转换成对应的函数地址--毕竟我们的CPU是一个老实人,它除了数字以外不能处理任何其他数据--例如字符串。

     

    因此对于.dll文件,链接器需要.lib文件告诉它函数名和函数地址之间的对应关系。

    2008年12月5日 11:07