热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我学程序不久,有点问题请教大家;先谢了

我还是第一次写程序,遇到难题。。我写的是一个3D软件的插件,就是DLL,我要在插件里实现文件写入的功能,我想知道用MFC的“串行化”写入可不可以,我看了有关资料,这样说:要让用户定义的
我还是第一次写程序,遇到难题。。
我写的是一个3D软件的插件,就是DLL,我要在插件里实现文件写入的功能,我想知道
用MFC的“串行化”写入可不可以,我看了有关资料,这样说:

要让用户定义的类支持串行化,一般分为五步:

1.从CObject或其派生类派生出用户的类

2.重载Serialize()成员函数,加入必要的代码,用以保存对象的数据成员到CArchive对象以及从CArchive对象载入对象的数据成员状态。

3.在类声明文件中,加入DECLARE_SERIAL宏。编译时,编译器将扩充该宏,这是串行化对象所必需的。

4.定义一个不带参数的构造函数。

5.在实现文件中加入IMPLEMENT_SERIAL宏。

我照做了,可是只要加上第五步编译的时候就出错,没有第五步编译可以通过,而构建的
时候说是link 2001 link 2002错误,这是为何?
是不是需要包括什末头文件我没加啊?

5 个解决方案

#1


#include 
#include 
#include 

#ifdef _WIN32
#include 
#else
#include 
#endif

#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 
using namespace std;
//          ///////////

#include 

#include 
#include 
#include 
#include 
#include 



#include 



class cr_mesh : public CObject{

cr_mesh(){};

public:

void Serialize(CArchive& );

DECLARE_SERIAL( cr_mesh)

struct point{
float x;
float y;
float z;
bool ifsmooth;
};
struct face{           
point begin;
point normal;
point end;
float area;
};
struct shader_face{    //具有单独SHADER的FACE属性
        point first;
point normal;
point end;
vector color;//物体本质颜色
float surface_smooth_quotiety;//表面光滑度,决定成像反射模糊程度,以及漫反射程度
float molecule_smooth_quotiety;//
                                   //及表现反射颜色和本质颜色的程度
float transparence;//透明度
float refract;//折射率
};
    vector color;
    vector box;
vector pointvector;
vector   face;
vector shader_face();
float surface_smooth_quotiety;
float molecule_smooth_quotiety;
bool  ifvis;//是否可见
bool  ifbereflect;//是否被反射
int   numpoint;
int   numface;
cr_mesh( const MDagPath path);
};

cr_mesh::cr_mesh( const MDagPath path){
MFnMesh mesh(path);
numpoint=mesh.numVertices();
MPoint point_pos;
vector pointvector(numpoint);
for (int i=0;i< numpoint;i++){
    pointvector[i]=new cr_mesh::point;
mesh.getPoint ( i,point_pos );
    pointvector[i]->x=point_pos.x;
pointvector[i]->y=point_pos.y;
pointvector[i]->z=point_pos.z;
}

}

DECLARE_SERIAL( cr_mesh,CObject)



void cr_mesh::Serialize(CArchive& ar){
CObject::Serialize( ar);
if(ar.IsStoring()){

}
}









void conver( MDagPath path ){
     
 
enum MGlobal::ListAdjustment {
         kReplaceList,   
         kXORWithList,  
         kAddToList,     
         kRemoveFromList };
 MFnDagNode node(path);
 MString name=node.name();
         MGlobal::selectByName ( name,  kReplaceList );
if ( path.hasFn(MFn::kMesh))






 

}
else if ( path.hasFn(MFn::kNurbsSurface)){
 

 
         MGlobal:: executeCommand("nurbsToPoly -mnd 1  -ch 1 -f 1 -pt 0 -pc 200 -chr 0.1 -ft 0.01 -mel 0.001 -d 0.1 -ut 1 -un 3 -vt 1 -vn 3 -uch 0 -ucr 0 -cht 0.2 -es 0 -ntr 0 -uss 1;");
         MGlobal:: executeCommand("move -r 3 0 0;");
 
      

}
else if( path.hasFn(MFn::kSubdiv))
{}



}











DeclareSimpleCommand( crmesh, "Alias|Wavefront", "4.5");
MStatus crmesh::doIt( const MArgList& )
{
MDagPath path;
    MStatus stat;
MItDag conver_dagIterator( MItDag::kDepthFirst, MFn::kModel, &stat);
for ( ; !conver_dagIterator.isDone(); conver_dagIterator.next() ) {
conver_dagIterator.getPath( path );
::conver(path);
}
MItDag dagIterator( MItDag::kDepthFirst, MFn::kPolyTriangulate , &stat);
for ( ; !dagIterator.isDone(); dagIterator.next() ) {
dagIterator.getPath( path );

int i=0;
vectorobj;
obj[i]=new cr_mesh(path);//顺便问一下这里这样写可以吗?
        i++;

}


return MS::kSuccess;
}

#2


上边是我的代码。。

#3


我是想先把需要的数据读入自定义的类中,然后再把这些数据写成文件,然后在自己写的软件
中再读入。
哪位大虾能告诉我完整的解决方案,在下感激不尽。。。

#4


出错也许是你把IMPLEMENT_SERIAL写错了,应该是三个参数。你代码里


DECLARE_SERIAL( cr_mesh,CObject)           //我想你是笔误吧,应该是IMPLEMENT_SERIAL(...,...,...)



void cr_mesh::Serialize(CArchive& ar){
CObject::Serialize( ar);
if(ar.IsStoring()){

}
}

#5


啊天啊!真的是这样, 谢谢你!
那现在我想把cr_mesh的一个实例写入文件还应该怎样写?比如说写到c:/a.dat

for ( ; !dagIterator.isDone(); dagIterator.next() ) {
dagIterator.getPath( path );

int i=0;
vectorobj;
obj[i]=new cr_mesh(path);//顺便问一下这里这样写可以吗?在没指定vector长度的情况下就给其元素付值?
        i++;

}


推荐阅读
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • ipsec 加密流程(二):ipsec初始化操作
    《openswan》专栏系列文章主要是记录openswan源码学习过程中的笔记。Author:叨陪鲤Email:vip_13031075266163.comDate:2020.1 ... [详细]
  • C语言是计算机科学和编程领域的基石,许多初学者在学习过程中会感到困惑。本文将详细介绍C语言的基本概念、关键语法和实用示例,帮助你快速上手C语言。 ... [详细]
  • WPF项目学习.一
    WPF项目搭建版权声明:本文为博主初学经验,未经博主允许不得转载。一、前言记录在学习与制作WPF过程中遇到的解决方案。使用MVVM的优点是数据和视图分离,双向绑定,低耦合,可重用行 ... [详细]
  • 万事开头难,凡事都有套路,勇敢迈出第一步就成功一大半了。本节将带领初学者们迈出属于自己的一小步。本书的开发工具采用AndroidStudio࿰ ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 文章目录Golang定时器Timer和Tickertime.Timertime.NewTimer()实例time.AfterFunctime.Tickertime.NewTicke ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
承诺你的慌言_153
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有