C导出接口与C++导出接口对比
2012-05-23 16:23
225 查看
C++导出的接口
宏定义:#define ADAPTER_DLL_API
__declspec(dllexport)
优点:
(1) 允许函数重载,即类中可以存在重名的函数
(2) 可以保证导出接口和使用接口的一致性,即可以直接使用导出的头文件
(3) 当接口名字或者参数类型和个数发生变化时,可以通过编译迅速定位问题。
(4) 可以将多个DLL工程和一个Exe工程放在一个大工程中,设置编译顺序和依赖关系,可以简单的编译、连接和运行。
缺点:
(1) 如果没有该DLL或者DLL的平台不匹配,运行相关的Exe程序会失败。
(2) 发布版本需要头文件,Lib文件,DLL文件
C导出的接口
宏定义:#define ADAPTER_DLL_API
extern"C" __declspec(dllexport)
函数如下:
// 加载C接口的DLL文件资源
HINSTANCE LoadLibrary(
LPCTSTR lpLibFileName
);
// 通过函数名查找相应的函数指针
FARPROC GetProcAddress(
HMODULE hModule,
LPCWSTR lpProcName
);
// 释放DLL文件资源
BOOL FreeLibrary(
HMODULE hLibModule
);
优点:
(1) 如果没有该DLL或者DLL的平台不匹配,可以运行相关的Exe程序,只是相关的功能用不上,其他的功能照样可以使用。
(2) 不需要相关的lib文件,降低了调用程序与DLL的程序的耦合性。
(3) 不需要以前的接口的情况下,包括增加接口和修改接口实现的下,不需要重新编译整个程序。
缺点:
(1) 不允许函数重载
(2) 发布版本需要头文件和DLL文件
(3) 需要增加一个接口文件,调用LoadLibrary(),GetProcAddress(),FreeLibrary()函数。
个人感觉,大工程最好使用C接口导出,小工程最好使用C++接口导出。
宏定义:#define ADAPTER_DLL_API
__declspec(dllexport)
优点:
(1) 允许函数重载,即类中可以存在重名的函数
(2) 可以保证导出接口和使用接口的一致性,即可以直接使用导出的头文件
(3) 当接口名字或者参数类型和个数发生变化时,可以通过编译迅速定位问题。
(4) 可以将多个DLL工程和一个Exe工程放在一个大工程中,设置编译顺序和依赖关系,可以简单的编译、连接和运行。
缺点:
(1) 如果没有该DLL或者DLL的平台不匹配,运行相关的Exe程序会失败。
(2) 发布版本需要头文件,Lib文件,DLL文件
C导出的接口
宏定义:#define ADAPTER_DLL_API
extern"C" __declspec(dllexport)
函数如下:
// 加载C接口的DLL文件资源
HINSTANCE LoadLibrary(
LPCTSTR lpLibFileName
);
// 通过函数名查找相应的函数指针
FARPROC GetProcAddress(
HMODULE hModule,
LPCWSTR lpProcName
);
// 释放DLL文件资源
BOOL FreeLibrary(
HMODULE hLibModule
);
优点:
(1) 如果没有该DLL或者DLL的平台不匹配,可以运行相关的Exe程序,只是相关的功能用不上,其他的功能照样可以使用。
(2) 不需要相关的lib文件,降低了调用程序与DLL的程序的耦合性。
(3) 不需要以前的接口的情况下,包括增加接口和修改接口实现的下,不需要重新编译整个程序。
缺点:
(1) 不允许函数重载
(2) 发布版本需要头文件和DLL文件
(3) 需要增加一个接口文件,调用LoadLibrary(),GetProcAddress(),FreeLibrary()函数。
个人感觉,大工程最好使用C接口导出,小工程最好使用C++接口导出。
相关文章推荐
- C导出接口与C++导出接口对比
- c风格回调函数 vs c++风格虚基类,关于接口定义和调用的对比
- OS X以及iOS平台上的的动态库导出c++接口类
- C++接口导出到lua组件
- tolua++导出c++接口时遇到的一些问题
- C++接口导出到lua组件
- 使用SWIG实现C++导出python接口的配置
- mysql的c函数接口以及c++接口的对比
- JAVA – 虚函数、抽象函数、抽象类、接口_对比C++
- C++ DLL导出接口
- VS中利用swig实现c/c++导出python接口
- [C++]库接口的导出方式
- JAVA与C++对比 --– 虚函数、抽象函数、抽象类、接口
- 在VS中利用swig导出c/c++ 的python接口文件
- c/c++混编,导出接口给lua调用
- [开源世界]从自动导出动态链接库接口看C++的缺点
- C++:VS2010中如何查看DLL的导出接口
- C++与C#对比学习:面向对象,接口,抽象类
- JAVA抽象类、接口和C++的虚函数对比
- 为什么用C++写库 但是导出接口时 却定义了C的接口(李大哥告诉我的,我还没有理解,先记着吧。为以后查询方便,哈哈)