难题求助(急!): VC/MFC,使用AutoCAD Activex接口提供的GetPoint(...)函数问题函数的问题

kuangwei86903222 2012-03-26 01:47:41
查阅了很多资料,也没搞定,很急。
在VC/MFC下,我用AutoCAD Activex接口控制AutoCAD,在用getpoint函数获取AUTOCAD图上的点时,在VBA 中getpoint的第一个参数可以为空,但是MFC下却不能为空,请问怎样正确设置getpoint函数的参数?

getpoint函数说明:
VARIANT IAcadUtility::GetPoint(const VARIANT& Point, const VARIANT& Prompt)

...全文
632 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
highflybird 2012-08-24
  • 打赏
  • 举报
回复
这样解决问题
// VARIANT used in place of optional-parameters.
VARIANT varOpt;
varOpt.vt = VT_ERROR;
varOpt.scode = DISP_E_PARAMNOTFOUND;
kuangwei86903222 2012-04-01
  • 打赏
  • 举报
回复
vba是嵌入在autocad里使用的吧。
ruihuzhou@163.com 2012-04-01
  • 打赏
  • 举报
回复
用的人少,可能这个方法不太好使吧。
我到是看到几篇论文,有用这个方法的,可惜只有大概方法,具体操作没有。
自己慢点摸索吧,实在不行的话采用VBA来做。
kuangwei86903222 2012-04-01
  • 打赏
  • 举报
回复
只能自己摸索,可能大家都不这么干吧,使用vc+activex+autocad
kuangwei86903222 2012-04-01
  • 打赏
  • 举报
回复
在你的autocad安装目录下面 可以找到vba的资料acad_aag.chm
现在参考书籍也是以vba为主,vba 和vc访问activex接口 有很大的相似处,只是调用形式不同。可以参考
ruihuzhou@163.com 2012-04-01
  • 打赏
  • 举报
回复
不知楼主是否有VC++ +ActiveX开发AutoCAD的相关资料,最好有例子跟着来学的,
我是刚开始做这个方面的东西,查的资料太少了。如果方便的话,发我些资料,谢谢
我邮箱zhouruihu110@163.com
ruihuzhou@163.com 2012-03-31
  • 打赏
  • 举报
回复
主要是刚开始学的VC 用VC++6.0编的程序。当然,用VBA或者VB+ActiveX也能实现接口功能。
以前没接触过VB 也不想学VB 还是想采用VC+ActiveX的方法往下做 不知是否可行
谢谢楼主的回答
kuangwei86903222 2012-03-31
  • 打赏
  • 举报
回复
补充:IAcadUtility::GetPoint的第一个参数point代表的是橡皮线的起始点,他的类型是VARIANT,点的坐标是存储在VARIANT::SAFEARRAY __RPC_FAR *__RPC_FAR *pparray中的。
kuangwei86903222 2012-03-31
  • 打赏
  • 举报
回复
zhouruihu110 嵌入到autocad里面 可以用vba,即使是新学的话也很容易入手。原来的c代码可以做成dll,通过vba来调用
kuangwei86903222 2012-03-31
  • 打赏
  • 举报
回复
谢谢各位的回答。
WaistCoat05的办法,提示:参数point(位于getpoint)中无效。
fishion的办法,提示:参数point(位于getpoint)中无效。
iamshuke的办法,提示:参数point(位于getpoint)中无效。

IAcadUtility::GetPoint 的第一个参数Point 似乎一定要给他付初值,如果付了了初值,就会有一条橡皮线出来了。真是郁闷呢


kuangwei86903222 2012-03-31
  • 打赏
  • 举报
回复
主要VC+ActiveX+AutoCAD 参考资料很少。我都是看vba的资料,然后翻译过来。
我现在做的程序主题是mfc做的,所以使用了MFC+ActiveX 。而vb+ActiveX 或者C# +activex都比vc方便,vc中需要使用VARIANT变量传递参数,需要使用IDISPATCH...多有不便。VBA是最方便的,但是好像只有Activex才能实现进程外调用,其他的AutoLisp ObjectArx VBA都是进程内的吧,或许。可以一起学习
iamshuke 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
能问下楼主吗?
最近在做一个小程序,是CAD图形读取,然后转为数控加工G代码的。
采用的VC++6.0编的程序,MFC做的界面,现在能读取CAD的DXF文件,显示加工图形,生成G代码等,基本功能已经实现。
现在,想把它做成一个模块,嵌入到AutoCAD2007里面,用啥接口?
我查了下,用ObjectARX的,但是他的配置为VS2005+ObjectX2007+AutoCAD2007,我不……
[/Quote]

如果想嵌到AutoCAD2007里面,用VC的话,只能用VS2005,可以采用ActiveX方式开发,但还是需要封装成ARX形式(生成一个.arx文件)。如果用VC6,只能用进程外的方式,即VC6通过AutoCAD的自动化对象实例进行操控。
ruihuzhou@163.com 2012-03-28
  • 打赏
  • 举报
回复
能问下楼主吗?
最近在做一个小程序,是CAD图形读取,然后转为数控加工G代码的。
采用的VC++6.0编的程序,MFC做的界面,现在能读取CAD的DXF文件,显示加工图形,生成G代码等,基本功能已经实现。
现在,想把它做成一个模块,嵌入到AutoCAD2007里面,用啥接口?
我查了下,用ObjectARX的,但是他的配置为VS2005+ObjectX2007+AutoCAD2007,我不想装VS2005,VS2005不会用。
还有用VB+ActiveX的,VB我不会。
想问下是否可以VC++6.0+ActiveX来开发?
学习VC半年的新手,分不多。
ruihuzhou@163.com 2012-03-28
  • 打赏
  • 举报
回复
只能用进程外的方式,即VC6通过AutoCAD的自动化对象实例进行操控。这个不是太懂,麻烦不?
按照你的意思,还是采用VS2005+ObjectARX来做与CAD2007的接口简单一些?我qq 705704601
6楼能否加我 指导下 谢谢6楼
iamshuke 2012-03-26
  • 打赏
  • 举报
回复
如果VBA下能为空,在VC/MFC下可用vtMissing(可自己定义:VARIANT vM; vM.vt=VT_ERROR;)。
即:GetPoint(vtMissing, _variant_t(_T("\n输入一个点:")));
fishion 2012-03-26
  • 打赏
  • 举报
回复
VARIANT Point;
VARIANT Prompt;
VariantInit(&Point);
VariantInit(&Prompt);

GetPoint(Point,Prompt);
WaistCoat05 2012-03-26
  • 打赏
  • 举报
回复
Point设置为LONG的0, Prompt设置为BSTR值的空试试。
kuangwei86903222 2012-03-26
  • 打赏
  • 举报
回复
AutoCAD 暂停等待用户输入一个点,将选择点的值设为返回值。Point 参数指定的在WCS中的相对基点。Prompt 参数指定了AutoCAD在暂停前显示的字串。Point 和 Prompt 都是可选项。

补充:
AutoCAD 用户可以通过输入一个当前单位格式的坐标点来指定一个点;GetPoint 将 Point 参数及返回值作为三维维点。用户也可以通过在图形屏幕上指定一个位置来确定一个点。如果提供了 Point 参数,AutoCAD 将从该点到当前十字光标处画一条橡皮筋线。
如果返回一个关键字而不是点,AutoCAD 将生成错误信息“用户输入关键词”。用 GetInput 方法可以获得返回值中的关键字。


3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧