C动态库的扩展

案例背景:一般的企业信息系统都有成熟的框架,可以由C语言编写,也可以由C++编写。软件的框架一般不会发生变化,能自由地集成第三方的产品;

案例需要:在socket通信中,完成数据加密功能。有n个第三方厂商的加密产品供你选择,如何实现动态库和第三方产品的解耦和?

要求能够:1.能够支持多个第三方产品的入围;2.企业的信息系统框架不能轻易发生改变。

提醒:C++通过面向抽象类编程已经很好地解决了(C++中的多态,C++编译器通过提前布局vptr指针,虚函数表,完成动态的迟邦定)。在C中有应当如何解决?

解决思路:

对于C动态库的扩展,可通过以下5个步骤进行:

1.在动态库的内部,需要提前定义好一套接口(函数指针类型的定义),搭建dll中的函数调用的模型框架;

2.在动态库的外部发布你的一套接口协议(发布你的.h文件);

3.厂商根据你的.h文件实现函数原型(编写子任务);

4.把厂商实现的函数的入口地址 注入 到你的函数调用模型框架中(main函数中完成);

5.在框架中 回调 厂商的函数实现。

原文地址:https://www.cnblogs.com/jswu-ustc/p/8412690.html

时间: 2024-07-30 08:32:59

C动态库的扩展的相关文章

(转)HelloWorld CMake CMake中构建静态库与动态库及其使用

继续完善Hello World,建立它的共享库, 包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello World字符串. 2,安装头文件与共享库. 3, 编写一个程序使用创建的共享库(静态库和动态库). cd /home/ccj/CMakeDemo mkdir t3   cd /backup/cmake/t3 mkdir lib   在t3目录下建立CMakeLists.txt,内容如下: PRO

HelloWorld CMake Demo 03:CMake中构建静态库与动态库及其使用

? 继续完善Hello World,建立它的共享库, 包括静态库和动态库. ? 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello World字符串. 2,安装头文件与共享库. 3, 编写一个程序使用创建的共享库(静态库和动态库). ? 一,准备工作: 在/home/ccj/CMakeDemo目录建立t3目录,用于存放本节涉及到的工程. cd /home/ccj/CMakeDemo mkdir t3 ? 二,建立共享库

HPunix如何生成动态库?

HPunix系统生成动态库编译的方法? 创建PIC中间文件的编译器选项是+z,创建动态库德链接器标志是-b. 1. cc +z d1.c d2.c /* 编译以".o"为扩展名的中间目标文件dl.o和dl2.o 可以同时编译多个.c文件. 2. ld -b -o  dl.so d1.o d2.o /* 根据目标文件d1.o d2.o 创建动态库dl.so 可以有多个目标文件(.o文件) 3. cc dl.so 即生成可执行文件,默认是a.out 4. cc dl.so -o  add 

DELPHI开发LINUX的动态库

WINDOWS的动态库是.dll,这个大家都知道. LINUX也有动态库,扩展名是.so,现在DELPHI也能开发LINUX的动态库哦. DELPHI对LINUX的开发支持越来越强. 原文地址:https://www.cnblogs.com/hnxxcxg/p/11290661.html

用Vs2013+VELT进行Linux开发:动态库

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 本文适用于vs2013 + Visual EmbedLinux Tools 0.1.1 1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行ubo

Linux下Gcc生成和使用静态库和动态库详解

参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主要是编译器.汇编器和连接器的不同),因此二者库的二进制是不兼容的. 本文仅限于介绍linux下的库. 1.2库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同

C/C++的静态库与动态库

C/C++编程中相关文件后缀(以Linux系统下为例): .a:           静态库(archive) .c/.cpp:  C/C++源程序 .h/.hpp: C/C++源程序的头文件 .i:           经过预处理后的C/C++源程序 .o:        对象文件 .s:        汇编语言代码 .so:      动态链接库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存运行.库有两种:静态库(Linux操作系统下是以.a做后缀,Windows操作系统

ios动态库

real framework中不可以使用类别 或 不可以不包含类文件 real framework 中直接调用NSClassFromString函数会返回null  需要强制加载指定类 或 直接通过类名引用 linux中静态库和动态库的区别 一.不同 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见

【转】Linux下gcc生成和使用静态库和动态库详解

一.基本概念 1.1 什么是库 在Windows平台和Linux平台下都大量存在着库. 本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主要是编译器.汇编器和连接器的不同),因此二者的库的二进制是不兼容的. 本文仅限于介绍linux下的库. 1.2 库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大. 共享库的代码是在可