首页 ›新闻中心

up6-c++示例发布

发布于 2019-11-28 17:27

1. 定义事件接收器

#pragma once

#pragma warning (disable : 4146)

#import "F:xproeratlup6codex86atlobjDebugHttpUploaderApp.tlb" named_guids, raw_interfaces_only

#include "HttpUploaderApp_i.h"

 

class up6Event : public IDispEventImpl<0,up6Event,&DIID__IHttpPartitionEvents,&LIBID_HttpUploaderAppLib,1,0>

{

public:

    up6Event();

    ~up6Event();

 

    STDMETHOD(recvMessage)(BSTR msg);

 

    BEGIN_SINK_MAP(up6Event)

        SINK_ENTRY_EX(0, DIID__IHttpPartitionEvents, 1, recvMessage)

    END_SINK_MAP()

};

 

.cpp代码

#include "stdafx.h"

#include "up6Event.h"

 

up6Event::up6Event(){}

up6Event::~up6Event(){}

 

STDMETHODIMP up6Event::recvMessage(BSTR msg)

{

    MessageBoxW(nullptr, L"recvMessage", L"", MB_OK);

    return S_OK;

}

 

2.打开文件选择窗口,并触发recvMessage事件

LRESULT CMainDlg::openFile_click(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)

{

    CLSID clsid;

    HRESULT hr = ::CLSIDFromProgID(L"Xproer.HttpPartition6.1", &clsid);

    if (!SUCCEEDED(hr))

    {

        MessageBoxW(L"创建组件失败,请先安装或注册组件", L"错误", MB_OK);

        return 0;

    }

 

    CComPtr < IUnknown > spUnk;

    hr = ::CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_IUnknown, (LPVOID *)&spUnk);

    CComDispatchDriver up6 = spUnk;

 

    //创建事件接收器

    auto ent = std::make_shared<up6Event>();

    ent->DispEventAdvise(spUnk);

 

    CComVariant version;

    up6.GetPropertyByName(L"Version", &version);

 

    std::wstring js = L"{"name":"open_files"}";

    CComVariant v1(js.c_str());

    CComVariant ret;

    hr = up6.Invoke1(

        L"postMessage",

        &v1,           

        &ret);     

 

    ent->DispEventUnadvise(spUnk);

 

    return 0;

}

 

运行

 

点击选择文件按钮,选择文件

  

 

触发事件,显示选择结果

  

微信
微信二维码

微信 · 全经理

QQ
QQ客服二维码

QQ:1085617561