在使用Visual studio作为开发工具,使用C语言开发大型项目时,通常一个解决方案(Solution)下有多个项目(Project)。使用Visual studio的 Solution Explorer视图可以展开显示。比如,笔者本人曾参与开发的项目,一个解决方案下有接近一百个Project。这些Project有的是作为应用程序(exe)去生成的,有的则是作为动态库(dll)去生成的。应用程序生成的是可执行程序,一般是作为项目的辅助工具或者扩展工具使用,项目的主程序(main函数入口)也是应用程序类型。其他动态库类型的项目,一般是组成主程序的各个功能模块,提供调用。动态库类型可以将程序的功能进行模块划分,不同的功能使用不同的动态库进行实现,便于模块的更新和维护,同时也方便多人同时开发不同的模块功能。
通常,在程序开发过程中,需要在一个Project中引用另外一个Project中的函数,本人在使用VS开发过程中,一般使用如下两种方式:
(1) 使用LoadLibrary函数进行显示调用。
首先传入被引用动态库的path路径,然后运用LoadLibrary函数加载动态库,再使用GetProcAddress获取函数调用入口。同时,对于动态库中被引用的函数,需要申明为导出函数,使用如下方式进行申明:
_declspec( dllexport )
(2) 使用VS开发工具添加引用
右键点击相关项目,选择Properties,打开属性面板; 点击面板左侧Common Properties,通用属性; 然后点击Add New Reference...按钮,添加相应被引用的项目即可。这样在项目中可以直接使用被引用项目中的函数,不用使用LoadLibrary加载动态库。同样,被引用函数需要声明为导出函数。
对于Linux环境而言,加载动态库的函数为dlopen,获取函数入口的函数为 dlsym;