我用C++写了一个COM组件, 其他人用C#调用这个组件中的方法 ,
他想在程序中直接 判断接口函数的返回值
比如 :
 if ( BeginVideo())
{
}
我的接口函数BeginVideo是这样写的1,在头文件:
 STDMETHOD(BeginVideo)(BSTR Keyid, int Index, int hWnd, int *pRet);2,idl 里面:
 [id(5), helpstring("method BeginVideo")] HRESULT BeginVideo(BSTR Keyid, int Index, int hWnd, [out,retval]int *pRet);
3,cpp里面 :
STDMETHODIMP CHxComVideo::BeginVideo(BSTR Keyid, int Index, int hWnd, int *pRet)
{
    *pRet = 888;
    return S_OK;
} 可是为什么他在C#编译器里 看到函数BeginVideo的返回值始终是void呢?????

解决方案 »

  1.   

    retval会返回的, 但是这是通常tlbimp的结果,这个可以特别制定的,就像import也可以指定很多调用形式
    你让他直接add COM reference看看,如果不行,可以把代码发给我,我帮你看看
    [email protected]
      

  2.   

    [id(5),   helpstring( "method   BeginVideo ")]   HRESULT   BeginVideo([in]BSTR   Keyid,   [in]int   Index,   [in]int   hWnd,   [out,retval]VARIANT_BOOL   *pRet);
      

  3.   

    他怎么没有在beginvideo()中放参数呢,
    BSTR   Keyid,   int   Index,   int   hWnd,   int   *pRet
     if   (   BeginVideo(keyid,index,hwnd,&pret)) 


      

  4.   

    要有[retval]的参数,c#里面才能看到返回值。
    C#里面是不需要判断返回值的,如果函数返回S_OK则函数运行成功,否则C#会根据返回值提示出错信息的。
    这个和VB是一样的。