-1
C++ COMを使用して、既存のExcelアプリケーションのイベントIID_ApplicationEventsをリッスンします。私のコードは別のEXEファイルに置かれます。 接続ポイントは、次のコードで初期化されています。私は、関数invokeを経由して、Excelのイベントを受け付けておりますExcel Automation - FindConnectionPointを使用してCOMイベントをフィルタリングする
IConnectionPointContainer* pCPC = NULL;
hr = pEventSource->QueryInterface(IID_IConnectionPointContainer,
(void**)&pCPC);
if (SUCCEEDED(hr)){
hr = pCPC->FindConnectionPoint(IID_ApplicationEvents, &m_pConnectionPoint);
if (SUCCEEDED(hr)){
hr = m_pConnectionPoint->Advise(this, &m_dwConnection);
if (FAILED(hr))
LOG_ERROR(L"m_pConnectionPoint->Advise - FAIL");
}
else
LOG_ERROR(L"FindConnectionPoint - IID_ApplicationEvents: FAIL");
pCPC->Release();
}
else
LOG_ERROR(L"IID_IConnectionPointContainer: FAIL");
return hr;
:
STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS* pDispParams,
VARIANT* pVarResult, EXCEPINFO* pExcepInfo,
UINT* puArgErr)
私の質問は以下の通りです:私のアプリのパフォーマンスを改善するために、実行中のExcelの速度を落とさずに、私はOnBeforeSaveイベントとOnCloseイベントのみに興味があります。私のプロセスで他のExcelイベントをフィルタリングする方法はありますか(私のInvoke関数を呼びたくはありません)?
いいえ、方法はありません。接続ポイントに接続すると、その接続ポイントによって発行されたすべてのイベントにサブスクライブします。気にしていないものは無視することができますが、呼び出されるのを避けることはできません。 –