up6-c++示例发布
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;
}
运行
点击选择文件按钮,选择文件
触发事件,显示选择结果