source: trunk/Utilities/VbsCallback/First.h @ 937

Last change on this file since 937 was 88, checked in by roman, 10 years ago
  • Property svn:keywords set to Id
File size: 2.0 KB
Line 
1////////////////////////////////////////////////////////////
2// Copyright (C) Roman Ryltsov, 2008-2012
3// Created by Roman Ryltsov roman@alax.info
4//
5// $Id: First.h 88 2012-08-11 11:44:30Z roman $
6
7#pragma once
8
9#include "VbsCallback_i.h"
10
11////////////////////////////////////////////////////////////
12// CFirst
13
14class ATL_NO_VTABLE CFirst :
15        public CComObjectRootEx<CComSingleThreadModel>,
16        public CComCoClass<CFirst, &CLSID_First>,
17        public IDispatchImpl<IFirst>
18{
19public:
20
21DECLARE_REGISTRY_RESOURCEID(IDR_FIRST)
22
23BEGIN_COM_MAP(CFirst)
24        COM_INTERFACE_ENTRY(IFirst)
25        COM_INTERFACE_ENTRY(IDispatch)
26END_COM_MAP()
27
28public:
29// CFirst
30
31// IFirst
32        //STDMETHOD(OuterDo)(LONG nA, IFirstSite* pSite, LONG* pnB) throw()
33        //{
34        //      ATLASSERT(pSite && pnB);
35        //      ATLVERIFY(SUCCEEDED(pSite->InnerDo(nA + 1, pnB)));
36        //      return S_OK;
37        //}
38        STDMETHOD(OuterDo)(LONG nA, IDispatch* pSite, LONG* pnB) throw()
39        {
40                ATLASSERT(pSite && pnB);
41                _ATLTRY
42                {
43                        CComVariant vB(nA + 1);
44                        const CComQIPtr<IDispatchEx> pDispatchEx = pSite;
45                        ATLENSURE_THROW(pDispatchEx, E_NOINTERFACE);
46                        #if defined(_DEBUG)
47                        {
48                                DISPID nIdentifier = DISPID_STARTENUM;
49                                for(; ; )
50                                {
51                                        if(pDispatchEx->GetNextDispID(fdexEnumAll, nIdentifier, &nIdentifier) != S_OK)
52                                                break;
53                                        CComBSTR sName;
54                                        ATLVERIFY(SUCCEEDED(pDispatchEx->GetMemberName(nIdentifier, &sName)));
55                                        ATLTRACE("nIdentifier %d, sName %s\n", nIdentifier, CString(sName));
56                                }
57                        }
58                        #endif // defined(_DEBUG)
59                        DISPID nIdentifier;
60                        ATLENSURE_SUCCEEDED(pDispatchEx->GetDispID(CComBSTR(L"IFirstSite_InnerDo"), 0, &nIdentifier));
61                        DISPPARAMS Parameters;
62                        ZeroMemory(&Parameters, sizeof Parameters);
63                        Parameters.rgvarg = &vB;
64                    Parameters.cArgs = 1;
65                        CComVariant vResult;
66                        ATLENSURE_SUCCEEDED(pDispatchEx->InvokeEx(nIdentifier, 0, DISPATCH_METHOD, &Parameters, &vResult, NULL, NULL));
67                        ATLASSERT(vResult.vt == VT_I4);
68                        *pnB = vResult.lVal;
69                }
70                _ATLCATCH(Exception)
71                {
72                        return Exception;
73                }
74                return S_OK;
75        }
76};
77
78OBJECT_ENTRY_AUTO(__uuidof(First), CFirst)
Note: See TracBrowser for help on using the repository browser.