问 题: 请问如何在VB中操作VC控件接口中定义的VARIANT*参数
作 者: nawu (那五)
等 级:
信 誉 值: 100
所属论坛: VC/MFC ATL/ActiveX/COM
问题点数: 20
回复次数: 7
发表时间: 2002-4-3 11:27:27
例如在VC中
void CMyTestCtrl::GetBuf(VARIANT FAR* buf)
{
CString str="wuxx";
if(buf->vt==VT_BSTR);
buf->bstrVal=str.AllocSysString();
// TODO: Add your dispatch handler code here}
在VB中调用时
Dim stra As String
MyTest1.GetBuf straVB运行时出现类型不匹配的问题
请问如何解决
回复人: bill1212(Bill) ( ) 信誉:100 2002-4-3 13:06:21 得分:0
这样吧
Dim stra
MyTest1.GetBuf stra
Top
回复人: nawu(那五) ( ) 信誉:100 2002-4-3 13:53:41 得分:0
我VB不太熟悉
那么我如何在VB中把VARIANT变量转为BSTR类型
如果我的str是个数组,就只能他把定义为VARIANT了
Top
回复人: earthdog(Earthdog) ( ) 信誉:100 2002-4-3 23:38:05 得分:0
你可以在VB中直接象用BSTR一样的使用VARIANT啊,VB会自动实现这种转换的。
Top
回复人: nawu(那五) ( ) 信誉:100 2002-4-4 18:57:03 得分:0
但是确实是出现类型不匹配的问题
无法把String 按应用和VARIANT FAR* buf相互转化
Top
回复人: fftongzhi(程序员也爱家) ( ) 信誉:100 2002-4-5 13:12:51 得分:20
dim data as variant
Dim stra As String
MyTest1.GetBuf data
stra=data
Top
回复人: nawu(那五) ( ) 信誉:100 2002-4-5 13:50:25 得分:0
非常感谢 fftongzhi(程序员也爱家)
呵呵还是我水平不够..
Top
回复人: musuwang(musu) ( ) 信誉:100 2002-10-17 18:14:00 得分:0
等一等。为什么 winsock控件却能直接使用 string 传给VARIANT* 如下:dim mystr as string
wisock1.GetData mystr
作 者: nawu (那五)
等 级:
信 誉 值: 100
所属论坛: VC/MFC ATL/ActiveX/COM
问题点数: 20
回复次数: 7
发表时间: 2002-4-3 11:27:27
例如在VC中
void CMyTestCtrl::GetBuf(VARIANT FAR* buf)
{
CString str="wuxx";
if(buf->vt==VT_BSTR);
buf->bstrVal=str.AllocSysString();
// TODO: Add your dispatch handler code here}
在VB中调用时
Dim stra As String
MyTest1.GetBuf straVB运行时出现类型不匹配的问题
请问如何解决
回复人: bill1212(Bill) ( ) 信誉:100 2002-4-3 13:06:21 得分:0
这样吧
Dim stra
MyTest1.GetBuf stra
Top
回复人: nawu(那五) ( ) 信誉:100 2002-4-3 13:53:41 得分:0
我VB不太熟悉
那么我如何在VB中把VARIANT变量转为BSTR类型
如果我的str是个数组,就只能他把定义为VARIANT了
Top
回复人: earthdog(Earthdog) ( ) 信誉:100 2002-4-3 23:38:05 得分:0
你可以在VB中直接象用BSTR一样的使用VARIANT啊,VB会自动实现这种转换的。
Top
回复人: nawu(那五) ( ) 信誉:100 2002-4-4 18:57:03 得分:0
但是确实是出现类型不匹配的问题
无法把String 按应用和VARIANT FAR* buf相互转化
Top
回复人: fftongzhi(程序员也爱家) ( ) 信誉:100 2002-4-5 13:12:51 得分:20
dim data as variant
Dim stra As String
MyTest1.GetBuf data
stra=data
Top
回复人: nawu(那五) ( ) 信誉:100 2002-4-5 13:50:25 得分:0
非常感谢 fftongzhi(程序员也爱家)
呵呵还是我水平不够..
Top
回复人: musuwang(musu) ( ) 信誉:100 2002-10-17 18:14:00 得分:0
等一等。为什么 winsock控件却能直接使用 string 传给VARIANT* 如下:dim mystr as string
wisock1.GetData mystr
Dim stra As String
MyTest1.GetBuf data
stra=data对于Mytest服务器端 得到的参数类型根本为 VT_EMPTY。对于返回类型单一(如 VT_BSTR)的应用还可以使用。而对于可依不同类型分别处理的应用就不好办了。再者,不知道怎么实现隐式转换,就像Winsock 控件的GetData 方法那样可依需要直接传入不同类型的参数。dim mystr as string
wisock1.GetData mystr或:dim myByte(50) as BYTE
wisock1.GetData myByte屠夫兄能指点小弟一下吗
主要是
客户端使用时只需这样:dim mystr as string
wisock1.GetData mystr //直接传入string或:dim myByte(50) as BYTE
wisock1.GetData myByte //直接传入byte[]
而无需对参数进行显式转换(将传出的data转换为stra,为什么不直接传入stra?):dim data as variant
Dim stra As String
MyTest1.GetBuf data
stra=data