|
10 | 10 | #pragma warning(push)
|
11 | 11 | #pragma warning(disable : 4668 4820 4917)
|
12 | 12 |
|
| 13 | +#include <cassert> |
13 | 14 | #include <cstdlib>
|
14 | 15 | #include <iostream>
|
15 | 16 | #include <string>
|
@@ -43,6 +44,7 @@ CProxiedDispatch::CProxiedDispatch(IUnknown* pBaseClassUnknown, IDispatch* pDisp
|
43 | 44 | const IID& rIID1, const IID& rIID2, const char* sLibName)
|
44 | 45 | : CProxiedUnknown(pBaseClassUnknown, pDispatchToProxy, rIID1, rIID2, sLibName)
|
45 | 46 | , mpDispatchToProxy(pDispatchToProxy)
|
| 47 | + , mpDispIdToName(new std::map<DISPID, std::string>) |
46 | 48 | {
|
47 | 49 | if (getParam()->mbVerbose)
|
48 | 50 | std::cout << this << "@CProxiedDispatch::CTOR(" << pBaseClassUnknown << ", "
|
@@ -232,6 +234,15 @@ HRESULT STDMETHODCALLTYPE CProxiedDispatch::GetIDsOfNames(REFIID riid, LPOLESTR*
|
232 | 234 | }
|
233 | 235 | nResult = mpDispatchToProxy->GetIDsOfNames(riid, rgszNames, cNames, lcid, rgDispId);
|
234 | 236 |
|
| 237 | + if (rgszNames && rgDispId && nResult == S_OK && getParam()->mbTrace) |
| 238 | + { |
| 239 | + std::string sName = convertUTF16ToUTF8(rgszNames[0]); |
| 240 | + if (mpDispIdToName->count(rgDispId[0])) |
| 241 | + assert((*maDispIdToName)[rgDispId[0]] == sName); |
| 242 | + else |
| 243 | + (*mpDispIdToName)[rgDispId[0]] = sName; |
| 244 | + } |
| 245 | + |
235 | 246 | if (getParam()->mbVerbose)
|
236 | 247 | {
|
237 | 248 | std::cout << "..." << this << "@CProxiedDispatch::GetIDsOfNames: ";
|
@@ -312,7 +323,10 @@ HRESULT STDMETHODCALLTYPE CProxiedDispatch::Invoke(DISPID dispIdMember, REFIID r
|
312 | 323 | std::cout << "<" << (mpBaseClassUnknown ? mpBaseClassUnknown : this) << ">.";
|
313 | 324 |
|
314 | 325 | if (pTI == NULL)
|
315 |
| - std::cout << dispIdMember; |
| 326 | + if (mpDispIdToName->count(dispIdMember)) |
| 327 | + std::cout << (*mpDispIdToName)[dispIdMember]; |
| 328 | + else |
| 329 | + std::cout << dispIdMember; |
316 | 330 | else
|
317 | 331 | {
|
318 | 332 | BSTR sFuncName = NULL;
|
|
0 commit comments