compile可以通过,但build通不过,是什么回事,
我得程序有个问题,开始如果用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;x2=pt2;x=x1-x2;
y1=pt1;y2=pt2;y=y1-y2;
z1=pt1;z2=pt2;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; // 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文件结束
好像没有上载文件的功能了,
你应该及时释放对象占用的内存
尤其是C语言支持的struct数据,它没有默认的析构函数,不及时释放其占用的内存,会造成严重的内存泄漏。在我的机器上,Build构建没有问题,但执行时ACAD会死机。(我用VC.NET和ACAD2004)
暂时给这些提示,你自己将程序改改看。
另外,向导生成的文件是挺多的,但你只要注意你自己的CPP文件大概就行了。
至于在helloworld框架中不能构建ARX文件,可能是你的VC设置问题,你可以将出错信息贴出来吗?不过VC设置的确很麻烦,这就是要使用向导的主要原因。 下面是我看了你得提示后,对程序做了两个修改,一个是用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》我看得不快,有些问题还没看,
不说那么多了,当我看到我得贴着旁的"-"号变成”+“时,真的很高兴,
我也是个新手,在我自己的VC项目中有两个文件STDARX.H和STDAFX.H这两个头文件的具体内容你可以用OBJECTARX向导创建一个新项目,在项目中你可以看到,并且使用MFC和不使用MFC这两个头文件的内容是不一样的.我认为这两个文件的"内容"对连接产生ARX文件是很重要的. 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 对于你的工程作为以下修改:
“Tools"->"Options"->"C/C++"标签,在Category弹出式列表中Preprocessor项,在Preprocessor definitions编辑框原有内容后加上”ACRXAPP,RADPACK“
然后,如liron朋友所说,加上必要的*.lib文件即可。 谢谢,已经有些日子没有来明经通道了,C++难学,堕落之下,开始玩什么魔力宝贝了,也不知道开始学习mfc时看什么书好,我看那本深入浅出MFC ,不过,能看懂的太少了,一篇迷茫啊,最希望看到的就是一些短小精湛的文章,比如上次的 连载,要是有象这样的VC文章就好了,学习,还是要学习的,不过,我在等待兴趣的到来,只是希望我所碰到的难度不要那么陡峭,仅此而已
页:
[1]