📄 subject_62331.htm
字号:
<p>
序号:62331 发表者:yukie 发表日期:2003-11-26 11:52:04
<br>主题:请教关于VARIANT变量的用法?
<br>内容:请教关于VARIANT类型变量的优势和用处,请大家多多帮助!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:michael 回复日期:2003-11-26 12:37:51
<br>内容: 多用于自动化接口(IDispatch)输入和输出数据。像一些ActiveX控件要被多种语言调用,具备跨语言的特性。但是每种语言支持的数据类型又不尽相同,但是不管什么数据类型差别其实就是在内存里面占有的字节个数不同。所以人们设计了一个联合体这个联合体里面生命了所有的数据类型。这个联合体的大小就是占内存最多的那种数据类型的大小。<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>
回复者:yukie 回复日期:2003-11-27 10:37:51
<br>内容:谢谢michael ,<BR>我是把接收和发送的串口数据用这种变体定义,我想问的是用这种变体时必须要和函数SafeArrayUnaccessData(var.parray)结合使用吗?
<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>回复者:fiction 回复日期:2003-11-27 11:01:15
<br>内容:转述别人的一段话:<BR>SetOutput()函数中 需要的VARIANT参数还可以使用COleVariant类的构造函数简单生成,现在GetInput()函数的返回值也成了VARIANT类型,那么如何从返回的值中提取有用的内容。 VARIANT及由之而派生出的COleVariant类主要用于在OLE自动化中传递数据。实际上VARIANT也只不过是一个新定义的结构罢了,它的主要成员包括一个联合体及一个变量。该联合体由各种类型的数据成员构成, 而该变量则用来指明联合体中目前起作用的数据类型。我们所关心的接收到的数据就存储在该联合体的某个数据成员中。 该联合体中包含的数据类型很多,从一些简单的变量到非常复杂的数组和指针。由于通过串口接收到的内容常常是一个字节串,我们将使用其中的某个数组或指针来访问接收到的数据。这里推荐给大家的是指向一个SAFEARRAY(COleSafeArray)类型变量。新的数据类型SAFEARRAY正如其名字一样,是一个“安全数组”,它能根据系统环境自动调整其16位或32 位的定义,并且不会被OLE改变(某些类型如BSTR在16位或32位应用程序间传递时会被OLE翻译从而破坏其中的二进制数据)。大家无须了解SAFEARRAY的具体定义,只要知道它是另外一个结构,其中包含一个 (void *)类型的指针pvData,其指向的内存就是存放有用数据的地方。 简而言之,从GetInput()函数返回的VARIANT类型变量中,找出parray 指针,再从该指针指向的SAFEARRAY变量中找出pvData指针,就可以向访问数组一样取得所接收到的数据了。具体应用请参见void CSCommTestDlg::OnComm()函数。
<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 + -