明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3033|回复: 6

compile可以通过,但build通不过,是什么回事,

[复制链接]
发表于 2003-6-22 10:09 | 显示全部楼层 |阅读模式
我得程序有个问题,开始如果用objectARX2000 AppWizzard生成程序框架后,可以编译和构造,但在AutoCAD中加载后运行时,出现异常,一看由向导生成的文件挺多的,不好找错误,便把我得程序放在了helloworld例子的框架中,能编译,但不能构造arx文件,出现的错误提示我不懂,希望那位好心人帮帮忙,现在附上代码,如下,
//Cpp文件开始
#include <aced.h>
#include <rxregsvc.h>
#include <math.h>
#include <dbents.h>
void initApp();
void unloadApp();

void dist_alert();  //主要函数,
double acgedist(AcGePoint3d &pt1,AcGePoint3d &pt2){
        double x,y,z;
        double x1,y1,z1,x2,y2,z2;
        x1=pt1[0];x2=pt2[0];x=x1-x2;
        y1=pt1[1];y2=pt2[1];y=y1-y2;
        z1=pt1[2];z2=pt2[2];z=z1-z2;
        return sqrt(x*x+y*y+z*z);
}  //用于计算两 AcGePoint3d 点之间的距离的函数

void initApp()
{
    // register a command with the AutoCAD command mechanism
    acedRegCmds->addCommand("taoyi",
                                                        "ttt",
                                                        "ttt",
                            ACRX_CMD_MODAL,
                            dist_alert);
}

void unloadApp()
{
    acedRegCmds->removeGroup("taoyi");
}

//-------main function start,功能是选中一些Line后,弹出对话框来显示其长度值
void dist_alert()
{
struct resbuf eb1;
char sbuf1[10]; // Buffers to hold strings
ads_name ssname1;

eb1.restype = 0;        // Entity name
strcpy(sbuf1, "LINE");
eb1.resval.rstring = sbuf1;
eb1.rbnext = NULL; // No other properties

acedSSGet(NULL, NULL, NULL, &eb1, ssname1);

long ss_len, i;
ads_name cur_ent;
acedSSLength(ssname1, &ss_len);

for(i=0;i<ss_len;i++){
        acedSSName(ssname1, i, cur_ent);
        AcDbObjectId cur_ent_id;
        acdbGetObjectId(cur_ent_id,cur_ent);
        AcDbEntity* pcur_ent;
        acdbOpenObject(pcur_ent,cur_ent_id,AcDb::kForRead);
        AcDbLine *pcur_line;
        pcur_line = AcDbLine::cast(pcur_ent);// wait wait ....
        double dist_real;
        char* dist_str=NULL;
        dist_real = acgedist(pcur_line->endPoint(),pcur_line->startPoint());
        acdbRToS(dist_real,2,3,dist_str);
        acedAlert(strcat(strcat("The enity is the " , dist_str), " Units!"));
}  
}
//main function end-----------应该很简单吧^_^

extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{
    switch (msg)
            {
                case AcRx::kInitAppMsg:
                        acrxDynamicLinker->unlockApplication(pkt);
                        acrxRegisterAppMDIAware(pkt);
                        initApp();
                        break;
                case AcRx::kUnloadAppMsg:
                        unloadApp();
                        break;
                default:
                break;
    }
    return AcRx::kRetOK;
}
//CPP文件结束

好像没有上载文件的功能了,
发表于 2003-6-25 15:10 | 显示全部楼层

你应该及时释放对象占用的内存

尤其是C语言支持的struct数据,它没有默认的析构函数,不及时释放其占用的内存,会造成严重的内存泄漏。
在我的机器上,Build构建没有问题,但执行时ACAD会死机。(我用VC.NET和ACAD2004)
暂时给这些提示,你自己将程序改改看。
另外,向导生成的文件是挺多的,但你只要注意你自己的CPP文件大概就行了。
至于在helloworld框架中不能构建ARX文件,可能是你的VC设置问题,你可以将出错信息贴出来吗?不过VC设置的确很麻烦,这就是要使用向导的主要原因。
 楼主| 发表于 2003-6-25 20:21 | 显示全部楼层
下面是我看了你得提示后,对程序做了两个修改,一个是用ads_relrb()释放了resbuf结构变量
另一个是加了一个def文件(不好意思,开始忘了),但是仍然是有如下错误,

--------------------Configuration: dist_alert - Win32 Debug--------------------
Linking...
dist_alert.def : error LNK2001: unresolved external symbol acrxGetApiVersion
Debug/dist_alert.lib : fatal error LNK1120: 1 unresolved externals
LINK : fatal error LNK1141: failure during build of exports file
Error executing link.exe.

dist_alert.arx - 3 error(s), 0 warning(s)

---------------
我把我的那个文件夹传上来了,你可以看看那些错了,我用的是objectARX2000的库和VC6.0开发的,再autocad2000下测试,唉,看了你得提示,我又想了一会,不过实在是基础太差,还是偷懒一下吧,直接问你呢,那本《深入浅出mfc》我看得不快,有些问题还没看,
不说那么多了,当我看到我得贴着旁的"-"号变成”+“时,真的很高兴,

本帖子中包含更多资源

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

x
发表于 2003-6-29 15:48 | 显示全部楼层
我也是个新手,在我自己的VC项目中有两个文件STDARX.H和STDAFX.H这两个头文件的具体内容你可以用OBJECTARX向导创建一个新项目,在项目中你可以看到,并且使用MFC和不使用MFC这两个头文件的内容是不一样的.我认为这两个文件的"内容"对连接产生ARX文件是很重要的.
发表于 2003-7-18 11:17 | 显示全部楼层
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib rxapi.lib acrx15.lib acdb15.lib acutil15.lib acge15.lib acgiapi.lib achapi15.lib acISMobj15.lib acad.lib acedapi.lib acsiobj.lib
发表于 2003-8-6 11:02 | 显示全部楼层
对于你的工程作为以下修改:
“Tools"->"Options"->"C/C++"标签,在Category弹出式列表中Preprocessor项,在Preprocessor definitions编辑框原有内容后加上”ACRXAPP,RADPACK“
然后,如liron朋友所说,加上必要的*.lib文件即可。
 楼主| 发表于 2003-8-10 21:55 | 显示全部楼层
谢谢,已经有些日子没有来明经通道了,C++难学,堕落之下,开始玩什么魔力宝贝了,也不知道开始学习mfc时看什么书好,我看那本  深入浅出MFC ,不过,能看懂的太少了,一篇迷茫啊,最希望看到的就是一些短小精湛的文章,比如上次的 连载,要是有象这样的VC文章就好了,学习,还是要学习的,不过,我在等待兴趣的到来,只是希望我所碰到的难度不要那么陡峭,仅此而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 19:51 , Processed in 5.499276 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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