找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 550|回复: 3

[求助] 虚函数一问

[复制链接]

已领礼包: 5060个

财富等级: 富甲天下

发表于 2017-12-11 21:04:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
把对象指针强制转换为块参照对象指针,可以这样写AcDbBlockReference::cast (pEnt);
那么如果我只知道AcRxclass的name为"TDbWireDimNew"
怎样调用它的cast虚函数?


这个程序的场景是这样的:
打开的对象是天正对象 TCH_WIREDIM2 ,
        AcDbEntity * TCH_WIREDIM2;
        es=acdbOpenObject(TCH_WIREDIM2, id, AcDb::kForRead);

并调用了其中的一个函数getWireText(void*)获得对象文字,
   __asm{                                 push str2
mov ecx,TCH_WIREDIM2
push ecx
call p_getWireText
mov eax,DWORD PTR [eax]
mov str,eax                        };
但是关闭的时候直接调用AcDbObject::close()函数时崩溃
TCH_WIREDIM2->close();

发现 call p_getWireText 后TCH_WIREDIM2的虚函数变了,即使isA()这么简单的函数都崩溃

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-12-12 00:31:38 | 显示全部楼层
厉害,都给反汇编了,我感觉就是知道了,还有很多路要走,没导入库LIB,函数你怎么调用呢
以前好像那XD API看过天正的对象,文字好像是从AcDbCurve派生的吧,不走寻常路,天正对象不管怎么,都肯定是从AcDbObject派生来的,你说isA崩溃,是不是天正做什么手脚了?

个人觉得,你还不如去研究研究OPM,只要特性对话框能查询,和修改天正对象,你用OPM就能做,天正绕不过去这个的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2017-12-12 09:18:10 | 显示全部楼层
已解决,把__vfptr保存到DWORD,
call p_getWireText 后再恢复虚表
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2018-2-23 17:44:54 来自手机 | 显示全部楼层
OPM很复杂,一样的功能com方便得多了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-14 06:32 , Processed in 0.400655 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表