我已经得到了指向一个对象的指针,variant类型的,请问如何使用它?
指针是通过COM中定了一个方法GetA(int i, IDispatch **pResult),它在vb里返回 IDispatch *类型,我赋给一个variant变量了,这个方法本身返回的是一个TestObj对象;请问该如何把variant变量还原成TestObj *,然后使用这个结果呢?

解决方案 »

  1.   

    你不用赋给变体,直接给object类型就可以了dim obj as object
    xx.GetA(i,obj)
      

  2.   

    我现在发现我的问题所在了,我的GetA返回的是nothing
    好奇怪啊,我在GetA里面有如下语句
    HRESULT GetA(int i, IDispatch **pResult)
    {
      TestObj *pObj = new TestObj;
      *pResult = pObj;
      //把 pObj 和pResult显示出起来,都是有值得
      MessageBox(...)
      ....
    }var = GetA(1)
    在vb里也确实弹出了对话框,显示有值,但是var就是nothing.....
    好奇怪啊
    是不是不能用new,而应该用CoTaskMemAlloc啊?
      

  3.   

    是的,你new的对象在堆栈上,GetA函数一返回它就被洗掉了
      

  4.   

    多谢!现在下面的语句已经好使了
    dim obj as object 
    xx.GetA1(i,obj)
    我现在想用类似如下的语句
    dim obj as object 
    obj = xx.GetA2(i)
    可是总提示:
    run-time   error   '91'   
      objat   variable   or   with   block   variable   not   set   
    跟踪进去,等号总是返回Empty给obj,请问什么原因呢?
    在idl里面,GetA1和GetA2的定义如下,只有第二个参数是不是retval:
    [id(1), helpstring("method func1")] HRESULT GetA1([in] int param1, [out] IDispatch **pResult);[id(2), helpstring("method func1")] HRESULT GetA2([in] int param1, [out, retval] IDispatch **pResult);
      

  5.   

    set obj = xx.GetA2(i) 
      

  6.   

    非常感谢你!
    这个帖子先结贴了
    希望你有空能看看我另外一个与这个相关的帖子:
    http://topic.csdn.net/u/20080621/18/12a2942c-e119-4b30-9f23-9ee0e07607b8.html?seed=765687266
    谢谢你的帮助