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++接口导出。