详细见:http://expert.csdn.net/Expert/topic/2979/2979870.xml?temp=.4648096
解决方案 »
- ISNETWORKALIVE函数问题
- 请SPI高手指点
- 解释FTP Server返回值226, Closing data connection. Requested file action successful ?
- VC程序的要求
- 火速求救:如何改变窗体标题?
- 这个问题很实用也很有趣,当然也“难”。。。。
- 新手初体验之:winsock2.h中的函数gethostname怎么没有作用。
- 我的机子找不到显卡了?
- 读取CAD的DXF文件中的SPLINE 样条曲线数据 求绘制此曲线的算法与实现
- 各位高手帮忙:怎样从对话框接收一个函数?(对不起,前一个帖子没写清楚)急用,谢谢了!
- 关于共同努力学习交流!
- 询问去除噪点的快速算法
{
char *name;
int net_id;
int visible;
int select;
net_data_t * ndata;
pad_hole_data_t *phdata;
struct conductor_net * next;
}conductor_net_t;typedef struct pad_hole_data
{
int op_code;
double x;
double y;
double cx;
double cy;
double dia;
int ism;
int isp;
int ids;
int layer_id;
struct pad_hole_data *next; }pad_hole_data_t;typedef struct net_data
{
double startx;
double endx;
double starty;
double endy;
double cx;
double cy;
int layerid;
struct net_data *next;}net_data_t;上面是相关的基本结构!!
全部是c的
现在的问题是给定一个conductor_net的头节点 *cnhead 然后将链表中的内容全部保存到文件中,包括节点中的子链表读文档时,能快速和相对比较简单的生成和原链表结构一致的链表
谢谢!
class T_BaseClassInfor : public CObject
{
public: T_BaseClassInfor();
virtual void Serialize(CArchive& ar);
void GZLI_SetName(CString& name);
CString GZLI_GetName();
void GZLI_SetAuthority(CString& Authority);
CString GZLI_GetAuthority();private: CString S_Name;
CString S_Authority;protected: DECLARE_SERIAL(T_BaseClassInfor)};
class T_FuncParameterInfor : public CObject
{public:
T_FuncParameterInfor();
virtual void Serialize(CArchive& ar);
void GZLI_SetParaName(CString& paraname);
CString GZLI_GetParaName();
void GZLI_SetParaType(CString& Paratype);
CString GZLI_GetParatype();private:
CString S_ParaName;
CString S_ParaType;protected: DECLARE_SERIAL(T_FuncParameterInfor)};class T_MemDataInfor : public CObject
{
public: T_MemDataInfor();
virtual void Serialize(CArchive& ar);
void GZLI_SetDataName(CString& DataName);
CString GZLI_GetDataName();
void GZLI_SetDataType(CString& DataType);
CString GZLI_GetDataType();
void GZLI_SetVisitRight(CString& VisitRight);
CString GZLI_GetVisitRight();private:
CString S_MemDataName;
CString S_MemDataType;
CString S_VisitRight;protected: DECLARE_SERIAL(T_MemDataInfor)};class T_FuncInfor : public CObject
{
public:
T_FuncInfor();
virtual void Serialize(CArchive& ar);
void GZLI_SetFuncName(CString& name);
CString GZLI_GetFuncName();
void GZLI_SetReturnType(CString& type);
CString GZLI_GetReturnType();
void GZLI_SetVisitRight(CString& visitright);
CString GZLI_GetVisitRight();
void GZLI_SetVirtual(BOOL Virtual);
BOOL GZLI_GetVirtual();
public:
void NewFuncParameter();
private: CString S_FuncName;
CString S_ReturnType;
CString S_VisitRight;
BOOL B_Virtual;
public: CTypedPtrList<CObList,T_FuncParameterInfor*> L_ParamaterList;
// CString S_FuncCode;protected:
DECLARE_SERIAL(T_FuncInfor)
public:};class T_ClassInfor : public CObject
{
public:
virtual void Serialize(CArchive& ar);
T_ClassInfor();
public: CTypedPtrList<CObList,T_BaseClassInfor*> BaseClassList;
CTypedPtrList<CObList,T_FuncInfor*> MemFuncList;
CTypedPtrList<CObList,T_MemDataInfor*> MemDataList;
public:
void newbaseclass();
void newmemfunc();
void newmemdata();protected: DECLARE_SERIAL(T_ClassInfor)public:};
IMPLEMENT_SERIAL(T_BaseClassInfor,CObject,1)
T_BaseClassInfor::T_BaseClassInfor()
{
//for dynamic creation
}void T_BaseClassInfor::GZLI_SetName(CString& name)
{
S_Name = name;}CString T_BaseClassInfor::GZLI_GetName()
{
return S_Name;
}void T_BaseClassInfor::GZLI_SetAuthority(CString& Authority)
{
S_Authority = Authority;}CString T_BaseClassInfor::GZLI_GetAuthority()
{
return S_Authority;
}void T_BaseClassInfor::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
ar << S_Name << S_Authority;
}
else
{
ar >> S_Name >> S_Authority;
}}
IMPLEMENT_SERIAL(T_FuncParameterInfor,CObject,1)T_FuncParameterInfor::T_FuncParameterInfor()
{
//for dynamic create
}void T_FuncParameterInfor::GZLI_SetParaName(CString& paraname)
{
S_ParaName = paraname;}CString T_FuncParameterInfor::GZLI_GetParaName()
{
return S_ParaName;
}void T_FuncParameterInfor::GZLI_SetParaType(CString& paratype)
{
S_ParaType = paratype;}CString T_FuncParameterInfor::GZLI_GetParatype()
{
return S_ParaType;
}
void T_FuncParameterInfor::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
ar << S_ParaName << S_ParaType;
}
else
{
ar >> S_ParaName >> S_ParaType;
}}IMPLEMENT_SERIAL(T_MemDataInfor,CObject,1)T_MemDataInfor::T_MemDataInfor()
{
// for dynamic creation
}void T_MemDataInfor::GZLI_SetDataName(CString& DataName)
{
S_MemDataName = DataName;}CString T_MemDataInfor::GZLI_GetDataName()
{
return S_MemDataName;
}void T_MemDataInfor::GZLI_SetDataType(CString& DataType)
{
S_MemDataType = DataType;}CString T_MemDataInfor::GZLI_GetDataType()
{
return S_MemDataType;
}void T_MemDataInfor::GZLI_SetVisitRight(CString& VisitRight)
{
S_VisitRight = VisitRight;}CString T_MemDataInfor::GZLI_GetVisitRight()
{
return S_VisitRight;
}void T_MemDataInfor::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
ar << S_MemDataName << S_MemDataType << S_VisitRight;
}
else
{
ar >> S_MemDataName >> S_MemDataType >> S_VisitRight;
}}IMPLEMENT_SERIAL(T_FuncInfor,CObject,1)T_FuncInfor::T_FuncInfor()
{
//for dynamic creation
}void T_FuncInfor::GZLI_SetFuncName(CString& name)
{
S_FuncName = name;}CString T_FuncInfor::GZLI_GetFuncName()
{
return S_FuncName;
}void T_FuncInfor::GZLI_SetReturnType(CString& type)
{
S_ReturnType = type;
}CString T_FuncInfor::GZLI_GetReturnType()
{
return S_ReturnType;
}void T_FuncInfor::GZLI_SetVisitRight(CString& visitright)
{
S_VisitRight = visitright;
}CString T_FuncInfor::GZLI_GetVisitRight()
{
return S_VisitRight;
}void T_FuncInfor::GZLI_SetVirtual(BOOL Virtual)
{
B_Virtual = Virtual;
}BOOL T_FuncInfor::GZLI_GetVirtual()
{
return B_Virtual;
}
void T_FuncInfor::Serialize(CArchive& ar)
{
if( ar.IsStoring() )
{
ar << S_FuncName << S_ReturnType << S_VisitRight << B_Virtual;
L_ParamaterList.Serialize(ar); }
else
{
ar >> S_FuncName >> S_ReturnType >> S_VisitRight >> B_Virtual;
L_ParamaterList.Serialize(ar);
}}IMPLEMENT_SERIAL(T_ClassInfor,CObject,1)T_ClassInfor::T_ClassInfor()
{
// for dynamic creation
}void T_ClassInfor::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
BaseClassList.Serialize(ar);
MemFuncList.Serialize(ar);
MemDataList.Serialize(ar);
}
else
{
BaseClassList.Serialize(ar);
MemFuncList.Serialize(ar);
MemDataList.Serialize(ar); }
}
void T_FuncInfor :: NewFuncParameter()
{
T_FuncParameterInfor* newpara = new T_FuncParameterInfor;
CString m_string("paraname");
newpara->GZLI_SetParaName(m_string);
newpara->GZLI_SetParaType(m_string);
L_ParamaterList.AddTail(newpara);}
void T_ClassInfor::newbaseclass()
{
T_BaseClassInfor* newbase = new T_BaseClassInfor;
CString m_string("public"); newbase->GZLI_SetAuthority(m_string);
newbase->GZLI_SetName(m_string); BaseClassList.AddTail(newbase);}void T_ClassInfor::newmemfunc()
{
T_FuncInfor* newfunc = new T_FuncInfor;
newfunc->NewFuncParameter();
CString m_string("index");
newfunc->GZLI_SetFuncName(m_string);
newfunc->GZLI_SetReturnType(m_string);
newfunc->GZLI_SetVisitRight(m_string);
newfunc->GZLI_SetVirtual(FALSE);
MemFuncList.AddTail(newfunc);}
void T_ClassInfor :: newmemdata()
{
T_MemDataInfor* newdata = new T_MemDataInfor;
CString m_string("dataname");
newdata->GZLI_SetDataName(m_string);
newdata->GZLI_SetDataType(m_string);
newdata->GZLI_SetVisitRight(m_string); MemDataList.AddTail(newdata);}
这是我写一个类库管理系统使用的类的一部分 你只要修改一下就好了
conductor_net_t * new_conductor_net(void)
{
conductor_net_t *tmp = NULL;
tmp = (conductor_net_t*)malloc(sizeof( conductor_net_t));
if( tmp == NULL )
return NULL;
memset(tmp,0,sizeof(conductor_net_t));
tmp->net_id = -1;
tmp->visible = 1;
tmp->ndata = new_net_data();
if( tmp->ndata == NULL )
{
free(tmp);
} tmp->phdata = new_pad_hole_data();
if( tmp->phdata == NULL)
{
free_net_data(tmp->ndata);
free(tmp);
} return tmp;
}net_data_t * new_net_data(void)
{
net_data_t *tmp = NULL;
tmp = (net_data_t*)malloc(sizeof( net_data_t));
if( tmp == NULL )
return NULL;
memset(tmp,0,sizeof(net_data_t));
tmp->layerid = -1;
return tmp;
}pad_hole_data_t *new_pad_hole_data(void)
{
pad_hole_data_t *tmp = NULL;
tmp = (pad_hole_data_t*)malloc(sizeof( pad_hole_data_t));
if( tmp == NULL )
return NULL;
memset(tmp,0,sizeof(pad_hole_data_t));
tmp->ids = -1;
tmp->layer_id = -1;
return tmp;}void free_net_data( net_data_t * ndata)
{
if( ndata == NULL)
return;
net_data_t *tmp = ndata;
while( ndata != NULL)
{
tmp = ndata->next;
free(ndata);
ndata = tmp;
}
}void free_pad_hole_data(pad_hole_data_t *phdata)
{
if( phdata == NULL)
return;
pad_hole_data_t *tmp = phdata;
while( phdata != NULL)
{
tmp = phdata->next;
free(phdata);
phdata = tmp;
}}
void free_conductor_net(conductor_net_t * net)
{
if( net == NULL )
return;
conductor_net_t *tmp = net; while( net != NULL)
{
tmp = net->next;
if( net->name != NULL)
free(net->name);
if( net->ndata != NULL)
free_net_data(net->ndata);
if( net->phdata != NULL)
free_pad_hole_data(net->phdata);
free(net);
net = tmp;
}
}