apple06 发表于 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 文件

apple06 发表于 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("Pick 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 acenter line which used to be tested.",en,pt);
        //获得选中对象的ID
        acdbGetObjectId(pEntId,en);
        //打开对象
    acdbOpenObject(pEnt,pEntId,AcDb::kForWrite);
        //获取实体的长度
   
        AcGePoint3dsPnt,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;
}

funlxming 发表于 2003-8-11 15:30:00

你的程序要調用這人庫嗎.如不要就不要包進來

apple06 发表于 2003-8-16 20:53:00

谢谢,我的问题解决了.
不过现在又出现了新问题,当调用上面的程序打开一个.dwg文件时,在AUTOCA工作区中并没有打开指定的文件,而且在AUTOCAD视图菜单中也没有列出指定的文件,虽然输出的文件名仍然是指定的文件名,请问各位前辈高手,该如何解决.
页: [1]
查看完整版本: 当发生加载错误该怎样修改程序