petty 发表于 2005-8-2 08:42:00

请教一个关于VB的引用问题?

我的程序引用了autocad2000的库能控制cad的操作,但是人家的机子有可能是高版本的cad,如果我仍旧引用cad2000的库(lib),程序安装时将此库文件也同时压缩打包给用户,请问如果对方的机器上是装的cad2004,我的程序还能控制打开cad2004的文档吗?

mikewolf2k 发表于 2005-8-3 21:47:00

可以用后期绑定的方法,不指定acad的版本。

petty 发表于 2005-8-4 07:52:00

<P>请教楼上的兄弟,如何用后期绑定啊,小弟永世难忘,因为这个问题对我来说太重要了.</P>

mikewolf2k 发表于 2005-8-4 21:21:00

<P>dim acadapp as object</P>
<P>&nbsp;&nbsp;&nbsp; Set Acadapp = GetObject(, "AutoCAD.application")</P>

petty 发表于 2005-8-5 08:01:00

<P>谢谢兄弟,可能是我没说清楚,这种办法虽然能控制autocad文档的打开,但好象没有现实意义,因为只能打开cad(不管什么版本),但如果不"引用"的话,好象无法对文档进行操作,我需要的是对文档打开后的操作.比如.</P>
<P>Dim adModelSS As AcadSelectionSet<BR>&nbsp;&nbsp;&nbsp; Dim adEnt As Object<BR>&nbsp;&nbsp;&nbsp; Dim itemCnt As Integer<BR>&nbsp;&nbsp;&nbsp; Set ThisDrawing = AcadApp.ActiveDocument<BR>&nbsp;&nbsp;&nbsp; Set adModelSS = ThisDrawing.SelectionSets.Add("ModelSS")<BR>&nbsp;&nbsp;&nbsp; adModelSS.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ft(0) As Integer, fd(0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ft(0) = 0: fd(0) = "Dim*"<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; adModelSS.Select acSelectionSetAll, , , ft, fd<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For Each adEnt In adModelSS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If adEnt.TextOverride = "D1" Then adEnt.TextOverride = "%%c" &amp; d1: GoTo 200<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If adEnt.TextOverride = "D2" Then adEnt.TextOverride = "%%c" &amp; d2: GoTo 200</P>
<P>&nbsp;Next adEnt</P>
<P>这上面好多代码用这种办法根本不能识别,但如果事先"引用"的话就能成功操作。请教这种"后期绑定"能对cad文档进行操作吗?</P>

mikewolf2k 发表于 2005-8-5 21:06:00

你这段代码什么意思我不懂,反正后期绑定可以适用于不同版本的acad,一切操作都可以进行(除非高低版本的代码不同)。你可以设置断点,看看究竟是什么地方出错。

petty 发表于 2005-8-6 08:04:00

这段代码的意思是建立尺寸标注的选择集,然后将cad的尺寸标注为"D1"改为我程序中的变量"%%c"&nbsp;&amp; d1,改用你的后期绑定方法,能打开我的cad文档,但无法识别关键字"AcadSelectionSet".<BR>

petty 发表于 2005-8-6 11:10:00

<P>我原先通过"引用"方法控制cad用了下面的代码</P>
<P>Dim AcadApp As AcadApplication<BR>Dim AcadDoc As AcadDocument<BR>Dim ThisDrawing As AcadDocument<BR>Dim adModelSS As AcadSelectionSet</P>
<P>改用后期绑定方式后:</P>
<P>
<TABLE class=tablebody2 style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" width="90%" border=0>
<TBODY>
<TR>
<TD style="FONT-SIZE: 9pt; LINE-HEIGHT: 12pt" width="100%"><BR>
<P>dim acadapp as object</P>
<P>&nbsp;&nbsp;&nbsp; Set Acadapp = GetObject(, "AutoCAD.application")</P>
<P>那对AcadDoc\ThisDrawing \adModelSS这三个对象又将如何定义?因如果不事先"引用"的话,程序无法识别,特别是无法识别Dim adModelSS As AcadSelectionSet这句代码,如果能改成VB识别的话就解决了</P>
<P>谢谢!</P></TD></TR></TBODY></TABLE></P>

雪山飞狐_lzh 发表于 2005-8-6 18:47:00

<P>Sub tt()<BR>On Error Resume Next<BR>&nbsp;&nbsp;&nbsp; Dim adModelSS As Object<BR>&nbsp;&nbsp;&nbsp; Dim itemCnt As Integer<BR>&nbsp;&nbsp;&nbsp; Dim acadapp As Object</P>
<P>&nbsp;&nbsp;&nbsp; Set acadapp = GetObject(, "AutoCAD.Application")</P>
<P>&nbsp;&nbsp;&nbsp; Set ThisDrawing = acadapp.ActiveDocument<BR>&nbsp;&nbsp;&nbsp; ThisDrawing.SelectionSets("ModelSS").Delete<BR>&nbsp;&nbsp;&nbsp; Set adModelSS = ThisDrawing.SelectionSets.Add("ModelSS")<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Dim ft(0) As Integer, fd(0)<BR>&nbsp;&nbsp;&nbsp; ft(0) = 0: fd(0) = "Dim*"<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; adModelSS.Select 5, , , ft, fd<BR>&nbsp;&nbsp;&nbsp; MsgBox adModelSS.Count<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; For Each i In adModelSS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox i.TextOverride<BR>&nbsp;&nbsp;&nbsp; Next i<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; ThisDrawing.SelectionSets("ModelSS").Delete</P>
<P>End Sub<BR></P>

mikewolf2k 发表于 2005-8-7 13:02:00

所有不能识别的都改成object
页: [1] 2
查看完整版本: 请教一个关于VB的引用问题?