前言
C++在导出类,供外部使用时,一旦当前接口不能满足需求,需要增加接口时,会带来很大的麻烦,正文中将展开介绍。
一、C++导出类的注意事项
在编写动态库时,需要考虑ABI问题,在这里不多bb直接上书本上的文字:
二、万不得已扩充接口方案
1.导出库中扩展子类
为保证原有导出类的结构不变,以前开发的功能正常使用,可以增加子类,在子类中扩充接口,实现新增需求。
+class NuDevPINPAD_API CNuDevPinPadEx:public CNuDevPinPad {
+public:
+ CNuDevPinPadEx(){}
+ virtual ~CNuDevPinPadEx(){ENTERING_LOG_TRACE(m_pLog);}
+ virtual int FuncExtra1(int nPara1,int nPara2) {
+ ENTERING_LOG_TRACE(m_pLog);
+ return 0;
+ }
+
+};
2.使用者使用新的子类
类的使用者可以为使用新的功能则必须使用新的类才能访问新增的接口,同时也可以访问原有的功能接口。
- m_pPin = (CNuDevPinPad*)LoadDevice();
+ m_pPin = (CNuDevPinPadEx*)LoadDevice();
if (NULL == m_pPin) {
m_pLog->Error("InitDevice failed, load device dll failed");
return WFS_ERR_USER_ERROR;
}
+ m_pPin->FuncExtra1(0,1);