关于ATL COM idl函数描述out,retval的不同调用方式

'' C++ .h        STDMETHODIMP MyATL15(LONG a, LONG b, LONG* c);
'' C++ .idl      [id(1), helpstring("Method MyATL15")] HRESULT MyATL15([in] LONG a, [in] LONG b, [out,retval] LONG* c);
'' C++ .idl      [id(2), helpstring("Method MyATL16")] HRESULT MyATL16([in] LONG a, [in] LONG b, [out] LONG* c);
Private Sub Command1_Click()
    Dim a, b, c As Long
    Dim obj As Object
    Set obj = CreateObject("ATLSimpleObject15Test")
    Let a = 22
    Let b = 23
    c = obj.MyATL15(a, b)       '' idl keyword: retval
    MsgBox (c)
    
    Let a = 12
    Let b = 19
    Call obj.MyATL16(a, b, c)  '' equals:  obj.MyATL16 a, b, c
    MsgBox (c)
    Set obj1 = Nothing
End Sub

注意:ATL COM不能被托管代码用invoke方式调用。
反之,.net托管COM代码可以被 C++/VB/C#以invoke方式调用 

关于C# Method.Invoke方式调用C++ COM

 

posted @ 2023-03-22 09:13  enif  阅读(27)  评论(0编辑  收藏  举报
豫ICP备2021034901号