eden猴子mgqw个人编程经验:
注:本文针对的是linux下C/C++编程,windows下原理应该一样,只是编译命令不同。
由于某些原因,你不想公开你的源码,只提供库文件给客户使用,而且不想让客户看到定义的数据结构,怎么办呢??C语言的不透明结构体句柄就派上用场了。
下面这个列子用来说明怎么实现不透明结构体,例子总共有四个文件:
type.h sstruct.h flib.c test.c。
sstruct.h 结构体定义头文件,自己编译时使用,不给客户隐藏结构体定义。
type.h 编译好的库文件函数接口说明和句柄定义,给客户使用。
flib.c 给客户的函数库文件,这里只编译成.o文件,再加一个编译命令就编译成 XX.a静态库 或者 XX.so动态库
test.c 模拟客户的主函数文件,客户通过type.h定义的接口调用flib.c编译好的库文件。
其中sstruct.h是定义结构体的头文件,只被库文件flib.c引用;而type.h则定义了库文件flib.c实现的函数和库文件的结构体句柄,库文件flib.c和test.c主函数文件都引用。四个文件代码如下:
//type.h
typedef struct _Life_t * MsgLife;
void func( MsgLife *life );
void freefunc( MsgLife *life );
//sstruct.h
#include
#include
typede