乐筑天下

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

请帮我看看这个代码有什么问题?

[复制链接]
way

4

主题

12

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2005-1-10 23:22:00 | 显示全部楼层 |阅读模式
AcDbObjectId createLine()
                                                 {
        AcGePoint3d startPoint(10.0,10.0,0.0);
        AcGePoint3d endPoint(20.0,20.0,0.0);
                         AcDbLine *pLine=new AcDbLine(startPoint,endPoint);
        AcDbBlockTable *pblocktable;
        acdbCurDwg()->getBlockTable(pBlockTable,AcDb::kForRead);
        AcDbBlockTableRecord *pBlockTableRecord;
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
        pBlockTable->close();
        AcDbObjectId lineId;
        pBlockTableRecord->appendAcDbEntity(lineId,pLine);
        pBlockTableRecord->close();
        pLine->close()
编译时说:e:\ObjectARX 2004\ArxProject1\acrxEntryPoint.cpp(60): error C2601: “createLine” : 本地函数定义是非法的
回复

使用道具 举报

12

主题

54

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
102
发表于 2005-1-11 09:02:00 | 显示全部楼层
我把你的程序在ARX2002下面编译了一下,没有发现你说的错误提示,看看你的程序里面是否包含了头文件“migrtion.h”,把上面这段代码第六行和第七行的pblocktable和pBlockTable改一下,在代码的最后还应该加上一句return lineId;这样就OK了,我在AutoCAD2002下运行成功了,并得到了一条直线。
回复

使用道具 举报

way

4

主题

12

帖子

1

银币

初来乍到

Rank: 1

铜币
28
发表于 2005-1-11 15:47:00 | 显示全部楼层
// (C) Copyright 2002-2003 by Autodesk, Inc.
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted,
// provided that the above copyright notice appears in all copies and
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.         AUTODESK, INC.
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
//-----------------------------------------------------------------------------
//----- acrxEntryPoint.h
//-----------------------------------------------------------------------------
#include "StdAfx.h"
//-----------------------------------------------------------------------------
#define szRDS _RXST("")
//-----------------------------------------------------------------------------
//----- ObjectARX EntryPoint
class CArxProject2App : public AcRxArxApp {
public:
        CArxProject2App () : AcRxArxApp () {}
        virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
                AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
                // TODO: Add your initialization code here
                return (retCode) ;
        }
        virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
                AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
                // TODO: Add your code here
AcDbObjectId CreateLine()
{
        AcGePoint3d startPoint(10,10,0);
        AcGePoint3d endPoint(20,20,0);
        AcDbLine *pLine=new AcDbLine(startPoint,endPoint);
        AcDbBlockTable *pBlockTable;
        AcDbCurDwg()->GetBlockTable(pBlockTable,AcDbL::kForRead);
        AcDbBlockTableRecord *pBlockTableRecord;
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
        pBlockTable->close();
        AcDbObjectId lineId;
        pBlockTableRecord->appendAcDEntity(lineId,pLine);
                         pBlockTableRecord->close();
        pLine->close();
        return lineId;
}
                return (retCode) ;
        }
        virtual void RegisterServerComponents () {
        }
        // ----- ArxProject2.test command (do not rename)
        static void ArxProject2test(void)
        {
                // Add your code for command ArxProject2.test here
        }
} ;
//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(CArxProject2App)
ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject2App, ArxProject2, test, MyCommand1, ACRX_CMD_TRANSPARENT, NULL)
上面是我的代码,有什么不对吗?
在VC.NET上写的2004ARX
回复

使用道具 举报

12

主题

54

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
102
发表于 2005-1-11 20:14:00 | 显示全部楼层
我用的是ARX2002,你可以参照ObjectARX2002\docsamps\ents看一下你的代码,或者把完整的程序传上来,我也比较菜,只看代码找不出原因在哪
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2008-10-28 15:22:00 | 显示全部楼层
我和你的代码一样  出现的错误也差不多 为什么
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2008-10-28 22:24:00 | 显示全部楼层
这应该是常规情况下类的成员函数不能用作函数指针的问题!你把 createLine()函数定义成静态函数(如:static void createLine()),注意,你若想定义成一个命令,不应有返回值,
另外:
ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject2App, ArxProject2, test, MyCommand1, ACRX_CMD_TRANSPARENT, createLine【你原来是NULL】)
还有,代码里AcDbCurDwg()应该是别人定义一个返回当前数据库的函数,但却没有看到,应该用acdbHostApplicationServices()->workingDatabase()来替代。

回复

使用道具 举报

5

主题

21

帖子

3

银币

初来乍到

Rank: 1

铜币
41
发表于 2009-1-27 13:58:00 | 显示全部楼层
居然把代码放在卸载ARX函数里面????放在这里试试// TODO: Add your initialization code here
代码里AcDbCurDwg()应该是别人定义一个返回当前数据库的函数,但却没有看到,应该用acdbHostApplicationServices()->workingDatabase()来替代。  对的。。。。。
ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject2App, ArxProject2, test, MyCommand1, ACRX_CMD_TRANSPARENT, createLine【你原来是NULL】)
对的。。。。。  
哈哈
回复

使用道具 举报

7

主题

11

帖子

1

银币

初来乍到

Rank: 1

铜币
39
发表于 2009-1-27 14:51:00 | 显示全部楼层
楼主说的对  注意字母的大小写!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-6 04:14 , Processed in 0.158048 second(s), 68 queries .

© 2020-2025 乐筑天下

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