问  题:  请问如何在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
 
 
 
    
 
  
 

解决方案 »

  1.   

    不太明白。上例中最后解决方案是客户端调用时的显式转化。dim data as variant
    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屠夫兄能指点小弟一下吗
      

  2.   

    没办法。这个问题绕不过去。有人能指点一下吗?怎么实现类似winsock 控件的GetData([in,out]Varint* data)方法。
    主要是
    客户端使用时只需这样: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