VS2010动态库生成及应用问题

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

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

#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”。

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”。

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;                                       //音频渲染用directsound
private:
};

并且导出对象中的成员对象类如:CMediaDecoder m_MediaDecoder;                                 //解码对象 

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

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

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

下面是两个类的情况

类:CMediaDecoder

class API_DECLSPEC CMediaDecoder
{
public:
	CMediaDecoder();
	~CMediaDecoder();
private:
	bool            m_bVideoDecodeInitOK;
	bool            m_bAudioDecodeInitOK;
};

和类:CClass_Repeat_Play

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 添加到:链接器->输入->附加依赖项中,否则出错

例如:

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

三:

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

你可能感兴趣的:(winapi)