乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 123|回复: 9

arx的com接口编写

[复制链接]

4

主题

19

帖子

4

银币

初来乍到

Rank: 1

铜币
35
发表于 2013-12-14 19:40:00 | 显示全部楼层 |阅读模式
最近写了一个arx 的com接口,一共两个函数,一个是想cad命令行输出123,另一个是绘制直线,但第一个可以实现,第二个因为涉及到数据库老是崩溃,不知道为什么?还请高人指点。
第一个函数:STDMETHODIMP CmyCustomCom::Promt(DOUBLE* XX){
        // TODO: 在此添加实现代码
        acutPrintf("123\n");
        return S_OK;
}
可以成功运行
第二个函数
STDMETHODIMP CmyCustomCom::AddLine(DOUBLE* XX)
{
        // TODO: 在此添加实现代码
        AcGePoint3d ptStart(0, 0, 0);
        AcGePoint3d ptEnd(100, 100, 0);
        AcDbLine *pLine = new AcDbLine(ptStart, ptEnd);
        AcDbBlockTable *pBlockTable;
        acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead);
        AcDbBlockTableRecord *pBlockTableRecord;
        pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite);
        AcDbObjectId lineId;
        pBlockTableRecord->appendAcDbEntity(lineId, pLine);
        pBlockTable->close();
        pBlockTableRecord->close();
        pLine->close();
        return S_OK;
}
运行结果崩溃

eifluya4xqe.jpg

eifluya4xqe.jpg


为什么呀?
回复

使用道具 举报

32

主题

268

帖子

10

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
396
发表于 2013-12-14 20:48:00 | 显示全部楼层
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead);
改成这样呢?
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForWrite);
回复

使用道具 举报

32

主题

268

帖子

10

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
396
发表于 2013-12-14 20:50:00 | 显示全部楼层
还有 你没有使用多线程吧?
回复

使用道具 举报

4

主题

19

帖子

4

银币

初来乍到

Rank: 1

铜币
35
发表于 2013-12-15 11:00:00 | 显示全部楼层
没有使用多线程。给成kForWrite也是不行。
回复

使用道具 举报

32

主题

268

帖子

10

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
396
发表于 2013-12-15 12:24:00 | 显示全部楼层
有可能当前不存在acdbHostApplicationServices()->workingDatabase();
按提示极大可能在操作一个空指针,断点跟进去看看就知道了
回复

使用道具 举报

4

主题

19

帖子

4

银币

初来乍到

Rank: 1

铜币
35
发表于 2013-12-16 18:52:00 | 显示全部楼层

这个是源文件,开发平台是CAD2006和vs2003.望高手指教。


回复

使用道具 举报

32

主题

268

帖子

10

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
396
发表于 2013-12-17 21:09:00 | 显示全部楼层
楼主:

n4tqtee1uog.JPG

n4tqtee1uog.JPG


a104ea444s2.JPG

a104ea444s2.JPG

回复

使用道具 举报

1

主题

24

帖子

3

银币

初来乍到

Rank: 1

铜币
28
发表于 2013-12-18 14:45:00 | 显示全部楼层
文件解锁试试
回复

使用道具 举报

2

主题

165

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2013-12-19 17:02:00 | 显示全部楼层
明显,你的做法就是错误的,你用的是vc++的方法,而不是com
什么是com呢?就是cad提供的一个接口嘛
获取程序,获取文档,获取数据库,这套组合拳都还没有,怎么就说用com了呢?
回复

使用道具 举报

2

主题

165

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2013-12-19 17:28:00 | 显示全部楼层
复制代码注意一下,这些东西看上去是不是狠眼熟呢?
看下图

tltga1edp5z.png

tltga1edp5z.png


这个图,表达了com接口的来龙去脉,楼主还是太年轻拉
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 06:45 , Processed in 0.373583 second(s), 86 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表