代码如下:
自定义类型
typeder color_
{
  double r;
  double g;
  double b;
  double a;
}color;
COM中一个方法
  HRESULT SetColor(color Clr);
在vb中:
Dim c As color_
c.r = 0
c.g =0
c.b=0
c.a = 0
XXXX.SetColor(c)
编译的时候提示说自定义类型不能传值
我改成了 
COM中一个方法
  HRESULT SetColor(color* Clr);
请问在vb中怎么传这个值呢?我在vb.net下试过了都没有问题,我对vb不太懂
特来请教vb高手!!急!解决马上给分,在线等....

解决方案 »

  1.   

    最好用VARIANT包一下,这样比较好!EG:
    HRESULT SetColor(VARIANT Clr,int size);
    SetColor(VARIANT Clr,size)
    {
       color *data;
       hr = SafeArrayAccessData(Clr.parray, reinterpret_cast<PVOID*>(&data));
       .....
       hr = SafeArrayUnaccessData(Clr.parray);
       
    }
    vb端
    Dim clr(size) As color_
    ....
    Dim obj As Object
    obj = clr
    XXXX.SetColor(obj,size)
    就好了
      

  2.   

    HRESULT SetColor(color* Clr);
    传地址Vb应该不会拒绝的。vb的api大部分也是传地址。
      

  3.   

    是不会拒绝可是我不知道怎么写呢?eg:
    Dim clr(1) As color_
    ....
    XXXX.SetColor(clr)
    编译提示参数是引用类型的,那位大哥知道怎么调用这个方法呢?谢谢!
      

  4.   

    你的问题可以用创建自定义对象,实现IDispatch,自定义属性完成
    MFC Library Reference   
    TN065: Dual-Interface Support for OLE Automation ServersVisual C++ MFC Samples   Alphabetical List of MFC SamplesAUTOCLIK Illustrates Automation features. Includes AUTODRIV, a simple Automation client application that drives the AUTOCLIK sample application. 
    ACDUAL Demonstrates how to add dual interface support to an MFC-based Automation server. 
      

  5.   

    XXXX.SetColor(clr(0))
    传数组的第一个元素,如果是ByRef,Vb会把这个元素的地址传入
      

  6.   

    传数组的第一个元素并且用byref的方式传递就行
      

  7.   

    Dim  clr(1)  As  color_  
    ....  
    XXXX.SetColor(clr(1))
    还是有错!那位大哥帮忙呢?急呀!