📄 subject_17022.htm
字号:
<p>
序号:17022 发表者:indal 发表日期:2002-10-07 16:12:54
<br>主题://我在编写AUTOCAD ActiveX时,要画一个圆,圆心坐标类型是VARIANT,它应怎样赋值!
<br>内容://我在编写AUTOCAD ActiveX时,要画一个圆<BR> IAcadApplication m_autocad;<BR> IAcadDocuments m_acaddocs;<BR> IAcadDocument m_acaddoc;<BR> IAcadModelSpace m_acadmodel;<BR><BR> m_autocad.CreateDispatch("AutoCAD.Application")<BR> m_autocad.SetVisible(true);<BR> m_acaddocs.AttachDispatch(m_autocad.GetDocuments(),true);<BR> m_acaddoc.AttachDispatch(m_acaddocs.Add(vtMissing),true);<BR> m_acadmodel.AttachDispatch(m_acaddoc.GetModelSpace(),true);<BR> //想画一个园<BR> VARIANT center;<BR> double radiu=100;<BR> //LPDISPATCH IAcadModelSpace::AddCircle(const VARIANT& Center, double Radius)<BR> //Center 应怎样赋值呢?<BR> m_acadmodel.AddCircle(certer,r);<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:luo 回复日期:2002-10-07 17:10:10
<br>内容:VARIANT是一个比较复杂的结构,你可以通过COleVarian类来初始化它,但是我想你首先应该知道这个Center是以什么形式赋值的。你可以自己去MSDN去看一下VARIANT的定义你就知道了。你最好能找到现成的例子。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:㊣剑不如人♀ 回复日期:2002-10-07 17:48:39
<br>内容:在C++builder中是这样的: <BR>Variant pt; <BR>double temp; <BR>pt=VarArrayCreate(OPENARRAY(int,(0,2)),varDouble); <BR>temp=3.0; <BR>pt.PutElement(&temp,0); <BR>temp=4.0; <BR>pt.PutElement(&temp,1); <BR>temp=0; <BR>pt.PutElement(&temp,2); <BR><BR>Center应是一个数组,我估计是SafeArray数组。<BR>根据C++Builder的源码,在VC里程序应是怎样的呢??<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:徐景周 回复日期:2002-10-07 19:06:38
<br>内容:可试试下面方法:<BR><BR>VARIANT vaData;<BR><BR>vaData = m_com.YourMethodHere();<BR>ASSERT(vaData.vt == VT_BSTR);<BR><BR>CString strData(vaData.bstrVal);<BR><BR>可以加入各种类型,来用下面涵数转换: <BR><BR>CString VariantToString(VARIANT * va)<BR> {<BR> CString s;<BR> switch(va->vt)<BR> { /* vt */<BR> case VT_BSTR:<BR> return CString(vaData->bstrVal);<BR> case VT_BSTR | VT_BYREF:<BR> return CString(*vaData->pbstrVal);<BR> case VT_I4:<BR> s.Format(_T("%d"), va->lVal);<BR> return s;<BR> case VT_I4 | VT_BYREF:<BR> s.Format(_T("%d"), *va->plVal);<BR> case VT_R8:<BR> s.Format(_T("%f"), va->dblVal);<BR> return s;<BR> ... remaining cases left as an Exercise For The Reader<BR> default:<BR> ASSERT(FALSE); // unknown VARIANT type (this ASSERT is optional)<BR> return CString("");<BR> } /* vt */<BR> }<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:㊣剑不如人♀ 回复日期:2002-10-07 20:22:52
<br>内容:怎样把一个点的坐标赋值给一个VARIANT变量呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:luo 回复日期:2002-10-08 11:13:56
<br>内容:HRESULT hresult;<BR>SAFEARRAY *psa;<BR>SAFEARRAYBOUND rgsabound[2];<BR>rgsabound[0].lLbound = 0;<BR>rgsabound[0].cElements = x;//X坐标<BR>rgsabound[1].lLbound = 1;<BR>rgsabound[1].cElements = y;//Y坐标<BR>psa= SafeArrayCreate( VT_R8, 2, rgsabound );<BR>if ( psa == NULL )//报错<BR>VARIANT var;<BR>var.vt = VT_ARRAY;<BR>var.parray = psa;<BR>就可以了,不过我可是没有试过这段代码,我是根据你的C++Builder改的。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:㊣客家人 回复日期:2002-10-08 18:45:00
<br>内容:HRESULT getVariantFromDblArray(VARIANT* pVal, const double pt[3])<BR>{<BR> pVal->vt = VT_ARRAY | VT_R8;<BR><BR> SAFEARRAYBOUND rgsaBound;<BR> rgsaBound.lLbound = 0L;<BR> rgsaBound.cElements = 3;<BR><BR> pVal->parray = SafeArrayCreate(VT_R8, 1, &rgsaBound);<BR> if (! pVal->parray)<BR> return E_OUTOFMEMORY;<BR><BR> HRESULT hr;<BR> for (long i = 0; i < 3; i++)<BR> if ((hr = SafeArrayPutElement(pVal->parray, &i,<BR>(void*)&pt[i]))!=S_OK)<BR> return hr;<BR> return S_OK;<BR>}<BR>pass in autocad
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -