• vc 动态链接库编程


    ---恢复内容开始---

      学习vc,避免不了的要用到库函数。今天在群里有人问,c++写的dll,在vb里面是不是可以调用。正好自己这方面的知识也有些匮乏,所幸今天整理一下,供各位学习之用。

      DLL(Dynamic Linkable Library)就是一个库,可以提供给你一些变量,类或函数。在库的发展史上经历了“无库-静态库-动态库”发展历程。

      静态链接库是lib,动态链接库dll,都是实现代码共享。lib的指令都包含在exe文件中了,dll则不必包涵在exe中,exe执行是可以动态的引用和卸载与exe独立的dll文件。还有区别是静态库中不允许含有其他的静态或者动态库,dll则还可以再包含动态库和静态库。

     对动态链接库需要如下认识:

    1)与编译器器和编写语言无关

    只要遵循约定的dll接口编程规范和调用方式,各种语言写的dll都可以互相调用。譬如windows 系统提供的api,任何语言都可以调用不管是vc,vb还是delphi.

    2)常见动态链接库

    在windows系统system32里面有kernel32.dll,user32,gui32.dll。windowsAPI大都包含这些dll.kernel32.dll主要是处理内存管理和进程调度,user32.dll主要是与用户界面的交互,gui32.dll主要是负责绘图方面的操作。

    常用的messagebox就包含在user32.dll里面

    3)vc动态库的分类

     vc支持三种动态链接库Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL).

    非mfc动态库不采用mfc类库结构,导出函数提供的是C接口,可以被非mfc程序和mfc程序调用,mfc扩展dll采用mfc动态链接版本创建,只能被mfc类库编写的程序调用。mfc规则dll包含一个继承自Cwinapp的一个类,但是无消息循环。

    静态链接库:

    在vc 中新建一个静态链接库,并创建lib.c和lib.h,源代码如下

    lib.h

    #ifndef LIB_H

    #define LIB_H

    extern "C"  int add(int x,int y);//声明为C编译,连接方式的外部函数

    #endif

    lib.c

    #include "lib.h"

    int add(int x,int y)

    {

    return x+y;

    }

    编译这个工程就可以得到一个.lib文件了,该文件就是一个库函数,提供了add功能,将.lib文件和头文件交给用户,用户就可以使用add函数了。下面来看看怎么使用这个库,在刚才的工程所在的工作区里新建一个工程libcall,包含一个main.c文件,他演示了静态链接库的调用方法。

    #include<stdo.h>

    #include "..\lib.h"

    #pragma comment (lib,"..\\debug\\libTest.lib"); //指定与静态库一起链接

    int main(int argc,char* argv[])

    {

    printf("%d",add(2,3));

    }

    静态链接库的调用就是这么简单,或许我们每天都在用,可是我们没有明白这个概念。代码中#pragma comment( lib , "..\\debug\\libTest.lib" )的意思是指本文件生成的.obj文件应与libTest.lib一起连接。

    未完。。。待续

    ---恢复内容结束---

  • 相关阅读:
    elementUI布局,响应式布局实现一行5列或7列布局
    WPF中Popup控件的使用
    ItemControl条目类控件使用Index
    WPF PasswordBox控件使用
    C#调用外部程序
    WPF系统级Converter
    WPF全局异常和自定义异常
    Grid设置共享尺寸组进行联动
    软件测试技术复习提纲
    Mysql环境变量的配置(详细图解)
  • 原文地址:https://www.cnblogs.com/kukuchong/p/2854456.html
Copyright © 2020-2023  润新知