初学者,用ATL向导建立了环境,添加一新接口与接口实现类。
直接在一个CUI环境里通过COM库初始化调用可以成功,但到VB环境里就不行了,可以传递进去值,但返回不了

STDMETHODIMP Cleonmd5::GetInt(int *p1)
{
// TODO: Add your implementation code here
* p1 = 1000;
return S_OK;
}
就不行,为啥呢?

解决方案 »

  1.   


    vb代码
        Set aa = CreateObject("a.a1")
        i = 100
        aa.GetInt (i)
        MsgBox (i)
        Set aa = Nothing
      

  2.   

    首先GetInt的方法应该定义成HRESULT GetInt([out , retval] int* pl);(在idl文件中)
    在vb中调用如下:
    Set aa = CreateObject("a.a1")
        i = 100
        i = aa.GetInt
        MsgBox (i)
        Set aa = Nothing
      

  3.   

    [id(5), helpstring("method GetInt")] HRESULT GetInt([in,out]int * p1);;
    我的IDL是这样的,如果我直接加上retval可以吗?
      

  4.   

    哎呀,改成out retval后,VB运行时错误了
    wrong number of arguments or invalid property assignment.VB代码我没有改阿。只是把idl里改成这样了
    [id(5), helpstring("method GetInt")] HRESULT GetInt([out,retval]int * p1);
    有问题吗?
      

  5.   

    那我现在只有i = aa.GetInt(),那么我只能调用某一属性,给aa内部变量赋值?
    有没有办法这样
    j = 100
    i = aa.GetInt(j)