找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6076|回复: 8

[分享] 学习ObjectArx编写时候遇到的各种问题汇总

[复制链接]

已领礼包: 8121个

财富等级: 富甲天下

发表于 2013-5-20 03:00:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×

1.按照2007帮助中的每一步进行之后,在编译的时候出现

acutPrintf (_T("\nHello World!"));
出现这样的错误: '_T': identifier not found

在此页得到回答
http://www.objectarx.net/bbs/viewthread.php?tid=2168&extra=page%3D6
加这个头文件“TCHAR.h”

#include "TCHAR.h"

2. rxapi.lib(libinit.obj) : warning LNK4099: PDB 'rxapi.pdb' was not found with 'E:\ObjectARX2007\lib\rxapi.lib' or at 'g:\learnarx\hello\qj\debug\rxapi.pdb'; linking object as if no debug info

qj.exp : warning LNK4070: /OUT:qj.dll directive in .EXP differs from output filename 'G:\learnarx\hello\qj\Debug\qj.arx'; ignoring directive

查到此页
http://topic.csdn.net/u/20080412/14/8b3b0157-d3c1-4313-bc1d-6ca89840b240.html
和此页
http://www.mjtd.com/bbs/dispbbs.asp?boardID=14&ID=57411&page=1
说,按道理就是这样的,没有问题




3. 现在在加文字 的时候,编译出现了这个错误
错误        1        error C2664: 'AcDbText::AcDbText(const AcGePoint3d &,const ACHAR *,AcDbObjectId,double,double)' : cannot convert parameter 2 from 'const char *' to 'const ACHAR *'        e:\c\objectarx\temp\temp\qjcreateent.cpp 87        
后来查相关的objectARX的帮助,发现是这样的问题
AcDbText(
const AcGePoint3d& position,
const ACHAR* text,
AcDbObjectId style = AcDbObjectId::kNull,
double height = 0,
double rotation = 0);
而张帆书上的表达是 char* text
所以我修改了一下,不知道有没有用
没有用,结果要把字符串改成 (_T(“ddd”)); 才行

4. 错误
错误        1        fatal error LNK1104: 无法打开文件“rxapi.lib”        temp        
发现出现了这个错误那就是lib没有引入了,要修改linker
rxapi.lib acdb17.lib acge17.lib acad.lib acedapi.lib  根据帮助文档的说法,要假如这几个lib

5. 错误
继续运行,发现有如下问题
错误        1        error C2653: 'CCreateEnt' : is not a class or namespace name e:\c\objectarx\temp\temp\acrxentrypoint.cpp        69        
错误        2        error C3861: 'CreateLine': identifier not found        e:\c\objectarx\temp\temp\acrxentrypoint.cpp        69        
错误        3        error C2653: 'CCreateEnt' : is not a class or namespace name        e:\c\objectarx\temp\temp\qjcreateent.cpp 12        
这个说明刚才的打错了—qjCreateent而非 CcreateEnt(这个是张帆的例题的)

6. 错误
可以看到出现如下的错误
错误        1        fatal error C1083: Cannot open include file: 'arxHeaders.h': No such file or directory e:\c\objectarx\temp\temp\stdafx.h        95        
那是因为没有加入inc路径
可以右键点击项目后,选到这个inc的选项后加入

7. 今天遇到的新的错误是
错误        1        error C2065: 'helloWorld' : undeclared identifier        g:\work new pc\编程\c++\arx2011\arx2011\arx2011\helloworld.cpp        19        
错误        2        error C2365: 'helloWorld' : redefinition; previous definition was 'formerly unknown identifier'        g:\work new pc\编程\c++\arx2011\arx2011\arx2011\helloworld.cpp        34        
错误        3        error C4430: missing type specifier - int assumed. Note: C++ does not support default-int        g:\work new pc\编程\c++\arx2011\arx2011\arx2011\helloworld.cpp        41        

唉,总是好多错误
前两个错误是发现,忘记写这个代码了
void helloWorld();

然后,又出现了这个错误
错误        1        error C2664: 'AcEdCommandStack::addCommand' : cannot convert parameter 5 from 'void' to 'AcRxFunctionPtr'        g:\work new pc\编程\c++\arx2011\arx2011\arx2011\helloworld.cpp        20        

检查了一下,发现
// register a command with the AutoCAD command mechanism
acedRegCmds->addCommand(_T("HELLOWORLD_COMMANDS"),
_T("Hello"),
_T("Bonjour"),
ACRX_CMD_TRANSPARENT,
helloWorld());
这个最后一个的括号,要去掉,太多错误了,郁闷

ap appload
acrxGetApiVersion not found in R:\arx2011.arx
Make sure the app links with rxapi.lib and export the symbol.AcRxDynamicLinker
failed to load 'R:\arx2011.arx'
D:\Program Files\AutoCAD 2007\acad.exeUnable to load arx2011.arx file.
在CAD中加载后,出现这个问题,是没有写DEF吧

所以,最后的代码,就是这样了
#include "stdafx.h"#include <aced.h>#include <rxregsvc.h> #include <TCHAR.h>void initApp();void unloadApp(); void helloWorld();void initApp(){         // register a command with the AutoCAD command mechanism        acedRegCmds->addCommand(_T("HELLOWORLD_COMMANDS"),                _T("Hello"),                _T("Bonjour"),                ACRX_CMD_TRANSPARENT,                helloWorld);}void unloadApp(){         acedRegCmds->removeGroup(_T("HELLOWORLD_COMMANDS"));}void helloWorld(){         acutPrintf(_T("\nHello World!"));}extern "C" AcRx::AppRetCodeacrxEntryPoint(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;}




def文件的就是这样
EXPORTSacrxEntryPoint PRIVATEacrxGetApiVersion PRIVATE

今天把这个项目就移到VS2010和CAD2012在X64下的平台会遇到一些问题需要做这三个方面的改进
1. inc目录
E:\ObjectARX 2012\inc-x64;E:\ObjectARX 2012\inc;%(AdditionalIncludeDirectories)

2.link
E:\ObjectARX 2012\lib-x64;%(AdditionalLibraryDirectories)

3. link的输入
rxapi.lib;acdb18.lib;acge18.lib;acad.lib;%(AdditionalDependencies)

4. 然后在右上角的配置管理器中找到x64,加入
---------------------------------------------------
刚刚用VS2010及WIZARD来建立arx的方法
(1)用WIZARD建立,其中我加入了MFC支持,也不知道对不对
而后,我就ADD COMMAND,改成my1
那么,就去到
static void qjchArxLinemy1(void)
{
acutPrintf(_T("\nHello World!"));
// Add your code for command qjchArxLine.my1 here
}

这里加上这句话,然后就可以编译了,但是编译了不能通过,于是,就按照上面64位的操作弄了一遍,不过在编译过程中,经常出现LINK : fatal error LNK1000: Internal error during IncrBuildImage这个错误于是google http://hi.baidu.com/jialifuniya/blog/item/12a49dcf9d73c330f9dc6138.html
里面的方法2
第二种:修改链接选项,方法:项目->属性->链接器->常规   下面的“启用增量链接”,将“是(/INCREMENTAL)”改为“否(/INCREMENTAL:NO)”,然后确定就可以了。
是有效的,很好,然后ARX就可以加载了

晚上,又把函数库写大了许多
又遇到了一个问题
AfxMessageBox("半径过小!");
error C2665: “AfxMessageBox”:  重载中没有一个可以转换所有参数类型

查找,得到
http://hi.baidu.com/ioypig/blog/item/aac79219060c2470dab4bdd1.html/cmtid/19ad31b5dc4addc137d3ca22

   4     if(AfxMessageBox("是否真的要退出当前程序?",MB_YESNO)==IDYES)
   5     AfxGetMainWnd()->SendMessage(WM_CLOSE);
   6    }

办法1: 将第4行改为:if(AfxMessageBox(_T("是否真的要退出当前程序?"),MB_YESNO)==IDYES)

办法2:选择“项目”菜单->项目属性->配置属性->常规->字符集,改为“未设置”即可。
---------
AfxMessageBox(_T("半径过小!"));

11. 好不容易在2008里面把许多程序调好了,结果放到2010里面来,全部一片红第一个错误
using namespace System;
using namespace System::Threading;

//编译中出现

.\A.cpp(6) : error C2871: “System”: 具有该名称的命名空间不存在
.\A.cpp(7) : error C2653: “System”: 不是类或命名空间名称
.\A.cpp(7) : error C2871: “Threading”: 具有该名称的命名空间不存在

主要原因是 程序是托管代码,在项目设置中 选择公共语言运行库支持(/clr)项 ,就好了!

12
错误        1        error D8016: “/clr”和“/Gm”命令行选项不兼容        F:\work new NOTE\c++\0 已经成功的ARX\Delaunay的绘制\arx2011\arx2011\cl        arx2011

错误        1        error D8016: “/clr”和“/RTC1”命令行选项不兼容        F:\work new NOTE\c++\0 已经成功的ARX\Delaunay的绘制\arx2011\arx2011\cl        arx2011

于是,在属性C++中的代码生成,找到 基本运行时检查,修改为 默认值

困惑了几天的问题
错误        3        error C2143: 语法错误 : 缺少“;”(在“<class-head>”的前面)        f:\work new note\c++\0 已经成功的arx\arx2008选点画线\test2008\test2008\Qconvex.h        24        Test2008
错误        4        error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int        f:\work new note\c++\0 已经成功的arx\arx2008选点画线\test2008\test2008\Qconvex.h        24        Test2008

这个在C++里面一点问题都没有的,导入到arx的编程里面就整天出现这个代码
原因应该是 /CLR这个公共语言库的支持问题后来,发现

static vector<oint> convex_hull(vector<oint> P);
修改为
static std::vector<oint> convex_hull(std::vector<oint> P);
就可以了,可能是托管代码与否的关系,真郁闷啊然后
ref class Qconvex


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-5-20 11:29:49 | 显示全部楼层
不知道从何学起啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2013-5-20 12:07:26 | 显示全部楼层
黑叶子 发表于 2013-5-20 11:29
不知道从何学起啊

从 hello world ! 学起。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-21 08:16:09 | 显示全部楼层
LoveArx 发表于 2013-5-20 12:07
从 hello world ! 学起。

C语言??????????
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-10-7 14:15:16 | 显示全部楼层
:lol:lol:lol:lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 221个

财富等级: 日进斗金

发表于 2014-12-25 18:26:26 | 显示全部楼层
没学过,看起来有点乱;P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-1-12 10:05:44 | 显示全部楼层
非常不错,学习一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 112个

财富等级: 日进斗金

发表于 2016-5-6 14:51:43 | 显示全部楼层
谢谢楼主分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 27个

财富等级: 恭喜发财

发表于 2016-12-26 16:36:31 | 显示全部楼层
啥也不说了,感谢楼主分享哇!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 22:43 , Processed in 0.421211 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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