javaee论坛

普通会员

225648

帖子

355

回复

369

积分

楼主
发表于 2017-06-08 11:11:29 | 查看: 489 | 回复: 0

此文章纯属自己记性不好记录用,勿喷。。。。

下面记录的是关闭vs2010导出类,以及导出类后的使用问题,由于有继承,导出类中包含动态库,所以记录以便以后查阅。

< name="code" class="cpp">#ifndef _EXPORTING#define _EXPORTING#endif#ifdef _EXPORTING #define API_DECLSPEC __declspec(dllexport) //导出#else #define API_DECLSPEC __declspec(dllimport) //导入#endif class API_DECLSPEC CClass_Repeat_Interface{public:private:public: ClassRepeatEventIndex m_ClassRepeatEventIndex; //整个class的索引文件表 CClass_Repeat_HttpDownLoad_Extension1 * m_pHttpDownLoad_Extension1 ; //扩展1下载对象 CClass_Repeat_Play * m_p_Play; //整个class的播放对象 CClass_Repeat_Play_Media m_p_Play_Media[MAXMEDIAENTRY]; //音视频播放对象 数组 private:};


一:

上面是接口类,类中的成员函数分为三种:

1:结构体,这里不记录无关紧要如:ClassRepeatEventIndex m_ClassRepeatEventIndex;                          //整个class的索引文件表

2:类指针,如:CClass_Repeat_HttpDownLoad_Extension1 * m_pHttpDownLoad_Extension1 ;            //扩展1下载对象  

3:类对象,如:CClass_Repeat_Play_Media m_p_Play_Media[MAXMEDIAENTRY];   //音视频播放对象 数组


其中的类指针如下:
这里不用加导出标志“API_DECLSPEC”。

< name="code" class="cpp">class CClass_Repeat_HttpDownLoad_Extension1 : public CClass_Repeat_HttpDownLoad{public: CClass_Repeat_HttpDownLoad_Extension1(); virtual ~CClass_Repeat_HttpDownLoad_Extension1(); //下载扩展数据 virtual int ClassRepeatDownLoad(const char * url, void * table); //解析扩展数据 virtual int ClassRepeatPars(void * data);private: //将下载到的内容放到各自的索引表结构体中具体处理函数 //这里定义成static static int HttpDownLoadExtension1Proc(char * data, int datasize,void * table,OutParameterlist * noutparalist);public:private:};

其中类对象如下:

这里需要加导出标志“API_DECLSPEC”。

< name="code" class="cpp">class API_DECLSPEC CClass_Repeat_Play_Media : public CClass_Repeat_Play{public:private:public: CClass_Repeat_Play_Media(); CMediaDecoder m_MediaDecoder; //解码对象 int MeidaChannel; //机位号 CPlayAudio m_playSound; //音频渲染用directsoundprivate:};
并且导出对象中的成员对象类如:CMediaDecoder m_MediaDecoder;                                 //解码对象 

也需要加上导出标志“API_DECLSPEC”。

还有继承的类如:class API_DECLSPEC CClass_Repeat_Play_Media : public CClass_Repeat_Play

也需要加上导出标志“API_DECLSPEC”。

下面是两个类的情况

类:CMediaDecoder

< name="code" class="cpp">class API_DECLSPEC CMediaDecoder{public: CMediaDecoder(); ~CMediaDecoder();private: bool m_bVideoDecodeInitOK; bool m_bAudioDecodeInitOK;};
和类:CClass_Repeat_Play

< name="code" class="cpp">class API_DECLSPEC CClass_Repeat_Play {public: CClass_Repeat_Play(); virtual ~CClass_Repeat_Play();private:};


二:

下面是关于生成的动态库中包含了动态库,在工程中c/c++,链接器怎么配置问题

1:要生成的动态库例如叫"B",它自己包含的动态库叫“A”:

需要包含A的include路径,A的lib路径和A的lib文件

2:exe程序应用生成的动态库的工程

需要包含A的include路径,B的include路径,和B的lib路径和B的lib文件,并将A的dll文件和B的dll文件放到可执行文件同级目录中。

//如果是导出库需要将此lib 添加到:链接器->输入->附加依赖项中,否则出错

例如:

< name="code" class="cpp">#ifdef _EXPORTING//如果是导出库需要将此lib 添加到:链接器->输入->附加依赖项中,否则出错#else#pragma comment(lib,"tinyxml.lib")#endifhttp://blog..net/flyer_2001/article/details/42612399 看这个链接。

三:

1:如果生成的动态库有相对路径,exe程序包含了生成的动态库,则这个相对路径是相对于exe程序的。


您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017