明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1717|回复: 3

当发生加载错误该怎样修改程序

[复制链接]
发表于 2003-8-11 11:22:00 | 显示全部楼层 |阅读模式
我编写了一个计算.dwg文件中某一直线的程序,加载文件时提示发生如下错误,请问各位高手该如何修改,谢谢
_appload acrxGetApiVersion 在 E:\exeice\test\Debug\test.arx (程序目录)中未找到
确定与 rxapi.lib 存在有效的应用程序连接并输出该符号。AcRxDynamicLinker
加载E:\exeice\test\Debug\test.arx失败。
D:\program files\AutoCAD 2002\acad.exe无法加载 test.arx 文件
 楼主| 发表于 2003-8-11 11:26:00 | 显示全部楼层
源程序的代码如下:
#include <rxregsvc.h>
#include <aced.h>

#include <dbidmap.h>
#include <dbltrans.h>

#include <dbmain.h>
#include <dbsymtb.h>
#include <dbents.h>
#include <dbapserv.h>
#include <adslib.h>

#include <math.h>

//提取属性
void
LineEdit()
{

    AcDbObjectId transId;
    AcDbDatabase* pDb;
    char *fname;
    struct resbuf *rb;
    //提示让用户选择一个图形文件
    rb = acutNewRb(RTSTR);
    int stat = acedGetFileD("ick a drawing", NULL, "dwg", 0, rb);
    //如果选择有误,则提示拥用户推出,命令
    if ((stat != RTNORM) || (rb == NULL))
        {
        acutPrintf("\nYou must pick a drawing file.");
        return;
    }
   //将获得的文件名转化为字符串
    fname = (char*)acad_malloc(strlen(rb->resval.rstring) + 1);
    strcpy(fname, rb->resval.rstring);
    acutRelRb(rb);
   // 打开前面选中的图形文件
    pDb = new AcDbDatabase(Adesk::kFalse);
    if (pDb->readDwgFile(fname) != Acad::eOk)
        {
        acutPrintf("\nSorry, that draing is probably already open.");
        return;
    }
    acutPrintf("\nThe name of the draing is : %s",fname);

        //获得这个图形文件数据库的块表
    AcDbBlockTable *pBlockTable;
    pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
   
    //获得模型空间块表记录
        AcDbBlockTableRecord *pOtherMsBtr;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pOtherMsBtr, AcDb::kForRead);
    pBlockTable->close();



//    delete pDb;
//    pDb = NULL;

//    acad_free(fname);
     
    ads_name en;
        ads_point pt;
        AcDbEntity *pEnt;
        AcDbObjectId pEntId;
        //提示选择判断中心线
    acedEntSel("\nPlease Select a  center line which used to be tested.",en,pt);
        //获得选中对象的ID
        acdbGetObjectId(pEntId,en);
        //打开对象
    acdbOpenObject(pEnt,pEntId,AcDb::kForWrite);
        //获取实体的长度
   
        AcGePoint3d  sPnt,ePnt;
        double LineLength;
        if (pEnt->isKindOf(AcDbLine::desc()))
        {
                sPnt=((AcDbLine *)pEnt)->startPoint();
                ePnt=((AcDbLine *)pEnt)->endPoint();
        LineLength=sqrt(((sPnt.x)-(ePnt.x))*((sPnt.x)-(ePnt.x))+((sPnt.y)-(ePnt.y))*((sPnt.y)-(ePnt.y)));
  
                acutPrintf("\nThe length of the line is: %f",LineLength);
             
        }
        pOtherMsBtr->close();
        pEnt->close();


}

void
initApp()
{

    acedRegCmds->addCommand("test",
                "CHECK",
                "CHECK",
                ACRX_CMD_MODAL,
                LineEdit);

}


void unloadApp()
{
    acedRegCmds->removeGroup("test");

}

extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
{
    switch (msg) {
    case AcRx::kInitAppMsg:
        acrxDynamicLinker->unlockApplication(appId);
        acrxDynamicLinker->registerAppMDIAware(appId);
        initApp();
        break;
    case AcRx::kUnloadAppMsg:
        unloadApp();
        break;
   
    }
    return AcRx::kRetOK;
}
发表于 2003-8-11 15:30:00 | 显示全部楼层
你的程序要調用這人庫嗎.如不要就不要包進來
 楼主| 发表于 2003-8-16 20:53:00 | 显示全部楼层
谢谢,我的问题解决了.
不过现在又出现了新问题,当调用上面的程序打开一个.dwg文件时,在AUTOCA工作区中并没有打开指定的文件,而且在AUTOCAD视图菜单中也没有列出指定的文件,虽然输出的文件名仍然是指定的文件名,请问各位前辈高手,该如何解决.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 18:00 , Processed in 0.172936 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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