无边1
码龄16年
关注
提问 私信
  • 博客:55,511
    问答:215
    55,726
    总访问量
  • 13
    原创
  • 1,512,337
    排名
  • 37
    粉丝
  • 0
    铁粉

个人简介:这辈子最大的误会就是认为你我之间还存在误会!

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:重庆市
  • 加入CSDN时间: 2008-09-05
博客简介:

songly1的专栏

查看详细资料
个人成就
  • 获得3次点赞
  • 内容获得21次评论
  • 获得38次收藏
创作历程
  • 1篇
    2015年
  • 1篇
    2014年
  • 4篇
    2013年
  • 2篇
    2012年
  • 2篇
    2011年
  • 4篇
    2010年
成就勋章
创作活动更多

2024 博客之星年度评选报名已开启

博主的专属年度盛宴,一年仅有一次!MAC mini、大疆无人机、华为手表等精美奖品等你来拿!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

c,c++一个函数返回结构体到底可不可以?

答:

直接返回结构体或类对象是不行的,大多数情况都是出错!
首先说明,不是编译不报错,就代表你没错!
你的代码的结构体足够简单,所以编译没问题,你的逻辑足够简单,所以运行结果没有出错,真的是你运气好!
原因如下:
1.如果你的结构体或类是复杂对象,编译就会报错,如果你的结构体或类继承自CObject,比如一个CDialog对象,你返回对象试试看。
2.如果你的结构体是一个接口,即包含纯虚函数(必须要子类实现的,不能实例化),那返回对象也会编译不通过。
3.你返回的对象和接收的对象不是同一个对象,这会造成拷贝开销,对于包含大量数据的对象是应该避免这种拷贝开销。
4.返回的对象和接收的对象不是同一个对象,这是逻辑问题,那就说明你的使用仅限于查看,不能修改,因为不是同一个对象,修改无效。
5.你这种直接返回对象的使用方法,必须要求函数返回指定的结构体对象,不能返回NULL或者0,否则编译不能通过。那么你必须在接收端判断,接收的对象是否有效。
6.同理,不能使用继承,也就是不能返回这个结构体的子类,否则编译不能通过。

在C#里面,基本上都是你这种写法,因为C#没有指针概念,这种写法就是传址,是对的。在C++里面,这种写法就是传值,只有简单情况才是不会出错。

回答问题 2018.01.19

C++调用C#的Dll实现Xml读写

0.     前言C#采用Dom文档对象化的方式读写Xml十分简单,简而言之就是直接对类对象进行操作,主要是.net的反射机制相当强大。而C++没有反射机制,所以C++的对象属性无法遍历,因此不能实现对整个类属性的简化操作,需要一个一个属性或变量的处理,C++读写Xml通常的方式就是Sax单个解析,编写代码复杂度的太大,且不易扩展。 1.     C#实现Xml读写写Xml的时候可
原创
发布博客 2015.09.24 ·
1791 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

C++调用C#实现Xml读写

发布资源 2015.09.24 ·
rar

Justep X5深度体验及点评(转载)

一周前,参加了Justep起步公司的 X5免费培训,一共三天时间,也算是深度体验了。写几条看法出来,分享给各位。估计各位大侠也懒得看长篇大论,所以我多贴图,有图有真相嘛。我也偷个懒,有几幅贴图就直接用培训材料里的了。细节懒得写了,就写结论吧: 第一、 复杂业务的支持能力没问题从培训中提供的一些应用案例看,是可以做出很复杂的基于web的业务系统的。国内不少平台产品,做做OA勉强可以,
转载
发布博客 2014.02.21 ·
1395 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

基于VC2008的sqlite3的例子程序

基于VC2008的sqlite3使用的小例子
原创
发布博客 2013.11.19 ·
3814 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

用sqlite3写的VC小例子程序

发布资源 2013.11.19 ·
rar

VC工程清理工具

资源路径http://download.csdn.net/detail/songly1/6576029 写了一个简易的VC工程清理工具,针对vc6.0及vc2008。简单的清除工具,没有区分.obj,.link等文件,直接删除整个debug和release目录。另外还删除,ncb文件,因为在VS里面该文件太大。 1、网上copy了一段设置路径的代码如下:CString
原创
发布博客 2013.11.19 ·
1644 阅读 ·
0 点赞 ·
2 评论 ·
0 收藏

自制简易VC工程清理工具

发布资源 2013.11.19 ·
rar

VC下COM控件使用方法

1.activeX控件采用组建对象模型(COM),即标题所说COM控件。2.文中主要介绍两种类型:第一是以.ocx结尾的,第二是以.dll结尾的。3.注册.ocx的方法之一:Regserv32 c:\myctl.ocx或者Regserv32 /s c:\myctl.ocx4.VC2008下加载.ocx控件工程资源——Toolbox最下方空白处(右键)——选择choose I
原创
发布博客 2013.03.13 ·
4581 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

C++中单一对象构建

在C++使用类函数时,常常会在不同类的多个函数中不断的使用某一类的某些函数,则往往需要不断的创建该类的对象。为了避免这种重复创建的过程,以下介绍两种方法来构建单一对象或单一实例。 方法一:Class CAClass{....void DoSth(); friend CAClass& GetCA();}; CAClass& GetCA(){stat
原创
发布博客 2013.02.19 ·
1097 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

DXF中polyline的凸度计算

曾几何时自己写了读取dxf的方法,当时只是对Line,Arc,Circle和eplise的解析。对于多线POLYLINE和LWPOLYLINE的解析最终是放弃了。现在又一次找回了当时的代码,而且多线结构势在必行。网上找了很久,没有让人信服的方法,大部分都是只考虑直线的情况,要不然就是不负责任的照搬DXF中的描述。 对于直线、弧线顺序相连的多线结构,网上基本上没有。而弧线的计算最
原创
发布博客 2012.09.03 ·
7769 阅读 ·
2 点赞 ·
6 评论 ·
18 收藏

16进制CString与int相互转换

以下为VC2008下实现代码: 一、int型转16进制CStringCString IntToCStringHex(int algorism)//十六进制转换{ vector reNum;CString str;//倒序输出 do {  int nTemp = algorism%16;  algorism=algorism/16;  reNum.pu
原创
发布博客 2012.03.12 ·
9288 阅读 ·
0 点赞 ·
1 评论 ·
4 收藏

wxWidget多语言移植到MFC动态库DLL

发布资源 2011.07.05 ·
application/x-rar

MFC多语言实现--wxWidget移植法

发布资源 2011.06.06 ·
application/x-rar

MFC多语言方式——wxWidget多语言移植

此前移植了wxWidget代码,将其编写成动态库,可用在MFC中!相关代码在博客资源中,与文章同名。 1.移植wxWidget部分代码,生成DLL。在wxLocale.h中定义了宏_(),目的是为了使用Poedit可以将_()中包含的内容搜索出来,利用了wxWidget制作多语言的方便。http://d.download.csdn.net/down/3418287/songly1  2.将生成的w
原创
发布博客 2011.06.06 ·
5444 阅读 ·
0 点赞 ·
2 评论 ·
11 收藏

MFC多语言实现方法

发布资源 2011.06.06 ·
application/x-rar

MFC多语言实现方法

 我们公司目前软件大多数用MFC单文档实现,前段时间为了海外扩展,要求所以软件采用多语言。因此我给下属下了一个命令,就是归纳多语言实现方式,总结最优实现方式。 一共有四种方法:先介绍常规的前三种。例子在资源里面“MFC多语言实现方法”。     需要转换语言的地方有:1、程序界面:菜单,控件标签等。2、提示字符串等。 一、字符放在DLL资
原创
发布博客 2011.06.06 ·
7125 阅读 ·
0 点赞 ·
5 评论 ·
10 收藏

SkinMagic for VC 动态导入方式

发布资源 2010.12.07 ·
application/x-rar

皮肤工具——SkinMagic for VC2008改良版

前言:之前用Appface做VC皮肤,觉得很好用,但是该工具有试用期。由于此前学过逆向破解,后来就尝试破解软件,才发现其实是DLL里面加密了,惭愧无法破解,据说网上也无人破解。于是就改用了skinMagic,这个版本是2.2.1.1的,已被大牛破解,因此可以放心使用。这个skinMagic包含了SkinMagicLib.h,SkinMagicLib.lib,SkinMagic.dll,通过静态库辅助方式导入动态库,这里出现了一个问题,就是SkinMagicLib.lib好像是VC6.0做的,于是上面的方法在
原创
发布博客 2010.12.07 ·
2509 阅读 ·
1 点赞 ·
3 评论 ·
2 收藏

VC编程——水晶连连看外挂

之前写了一篇关于QQ游戏的连连看的外挂,从读取内存方式实现。读取内存方式有个缺点:如果游戏内存分配不是全局分配,而是临时分配,则每次读取的内存就和上次不相同,读内存就没意义了。下面介绍一个基于读图的方式制作的“水晶连连看”外挂。一:效果图上面显示的线条就是即将要消掉的棋子。二、需要具备的技能1、VC编程及技巧2、熟悉图像识别三、实现方法(由于这个外挂是同事编写的,因此代码略)1、按照之前的方法注册热键(HotKey)2、在OnHotKey中实现代码(和QQ的连连看类似)3、代码中通过抓图抓取连连看的界面窗口
原创
发布博客 2010.12.07 ·
1371 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多