comclient.cpp 1.8 KB
Newer Older
L
ljc545w 已提交
1
#include "pch.h"
2
#ifdef USE_COM
L
ljc545w 已提交
3 4 5 6 7 8 9 10
#include <atlbase.h>
#include <atlcom.h>
#include "../CWeChatRobot/WeChatRobotCOM_i.h"
#include "../CWeChatRobot/WeChatRobotCOM_i.c"

#include <iostream>
#include <thread>

L
ljc545w 已提交
11
// CComModule m_commodule;
L
ljc545w 已提交
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

class CSink :
    public CComObjectRoot,
    public _IRobotEventEvents
{
    BEGIN_COM_MAP(CSink)
        COM_INTERFACE_ENTRY(IDispatch)
        COM_INTERFACE_ENTRY(_IRobotEventEvents)
    END_COM_MAP()

public:
    virtual ~CSink() {}
    STDMETHODIMP GetTypeInfoCount(UINT* pctinfo) { return E_NOTIMPL; }
    STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) { return E_NOTIMPL; }
    STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) { return E_NOTIMPL; }
    STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
    {
#ifdef _DEBUG
        printf("sink, id: %d, parm: %f", dispIdMember, pDispParams->rgvarg[0].fltVal);
#endif
        return S_OK;
    }
};

36
BOOL PostComMessage(DWORD pid, int msgtype, VARIANT* msg) {
L
ljc545w 已提交
37
    HRESULT hr = S_OK;
38
    
L
ljc545w 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
    hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED);
    if (FAILED(hr))
        return false;

    CComPtr<IRobotEvent> spRobotEvent;
    hr = ::CoCreateInstance(CLSID_RobotEvent, NULL, CLSCTX_ALL, IID_IRobotEvent, (LPVOID*)&spRobotEvent);
    if (SUCCEEDED(hr)) {
        /*
        // 这段逻辑用于回调到微信
        CComObject<CSink>* sinkptr = nullptr;
        CComObject<CSink>::CreateInstance(&sinkptr);
        DWORD cookies = 0;
        AtlAdvise(spRobotEvent, sinkptr, __uuidof(_IRobotEventEvents), &cookies);
        */
        int __result = 0;
54
        spRobotEvent->CPostMessage(pid, msgtype, msg, &__result);
L
ljc545w 已提交
55 56 57 58 59 60
    }
    else {
        return false;
    }
    CoUninitialize();
    return true;
61 62
}
#endif // !USE_COM