Можно добавить Nelisquare — добротный, функциональный и шустрый клиент для Foursquare.
В ovi store его нет, но можно установить или с сайта или с поста-обсуждения на talk.maemo.org
Умеет работать с Molo.me, так что можно удобно и быстро постить в 4sq фотки в стиле инстаграм :)
В последней бете (от 10 декабря 2012) умеет интегрироваться с домашним каналом.
Уведомляет о новых версиях: доступны обновления до стабильных, бета, альфа версий.
Вы или не понимаете что пишете или не знаете какую проблему решаете.
COM_INTERFACE_ENTRY_FUNC(my_left_iid,0,myfunc)
приведет к тому что myfunc вызовется только когда riid интерфейса который пытаются запросить будет соответствовать my_left_iid и проверка его внутри функции всегда будет срабатывать, потому что с другим iid ваша функция не вызовется.
если же вместо второго параметра указывать
offsetofclass(IComInterface3, _ComMapClass)
то будет и проверка компилятора
считаю продолжение диалога бесмысленным.
Переаттестация — отличный способ определить реальный уровень технической грамотности вашего отдела разработки ПО.
ваша параноя вносит ошибки которые вы описали в статье. правильное использование стандартных средств таких ошибок не дает и не требует множественного перечисления интерфесов в разных местах.
«предельно подробная выдача» — это лукавство. Вы в своем методе имеете не больше информации чем внутри ENTRY_FUNC или блайнда.
в вашем объекте — ваш код, а ваш код включает ваши заголовки, а в ваших заголовках вся ваша параноя и проверки все внутри вашего кода уже есть из шаблонов.
riid содержит тот интерфейс который хотят запросить, проверок на «идентификатор интерфейса» никаких не надо, всё проверено до этого и именно потому попало в нужную вам функцию.
>>Где же здесь что-либо похожее не вызов InternalQueryInterface()?
файл atlcom.h хоть раз в жизни открывали? до atlbase.inl проходили?
То что вы описываете называется велосипедостроением и не знанием основ работы COM.
хотите ослеживать всё — вставьте в начало карты блайнд функцию, сохраняйте всё что угодно.
BEGIN_COM_MAP(CYetOtherImplementor)
//следим за всеми интерфейсами, даже теми которые мы не поддерживаем
COM_INTERFACE_ENTRY_FUNC_BLIND(0,myfunc) //самый первый элемент в карте
...
//размещаем выше нужного интерфейса если нужно следить только за ним
//COM_INTERFACE_ENTRY_FUNC(__uuidof(IComInterface3),0,myfunc_3)
...
COM_INTERFACE_ENTRY(IComInterface1)
COM_INTERFACE_ENTRY(IComInterface3)
...
COM_INTERFACE_ENTRY(IComInterface10)
...
END_COM_MAP()
static HRESULT WINAPI myfunc(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw)
{
//do some loggin for params
//riid -> clsid -> bstr, progid
return E_NOINTERFACE; //заставить работать далее по карте
}
static HRESULT WINAPI myfunc_3(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw)
{
//do some loggin for params
//riid always == __uuidof(IComInterface3)
return E_NOINTERFACE; //заставить работать далее по карте
}
Реализуйте логику логирования в своем хуке, но не переделывайте логику получения интерфейса. Вызовите далее по цепочке стандартный InternalQueryInterface, как это делает COM_INTERFACE_ENTRY_CHAIN
> Остается ответить на вопрос, зачем нужно оставить форму ввода нового отзыва на странице с товаром, хотя ею никто не будет пользоваться.
О крупных недостатках обычно с большим удовольствием сообщают. И если продают / перепродают.
В ovi store его нет, но можно установить или с сайта или с поста-обсуждения на talk.maemo.org
Умеет работать с Molo.me, так что можно удобно и быстро постить в 4sq фотки в стиле инстаграм :)
В последней бете (от 10 декабря 2012) умеет интегрироваться с домашним каналом.
Уведомляет о новых версиях: доступны обновления до стабильных, бета, альфа версий.
приведет к тому что myfunc вызовется только когда riid интерфейса который пытаются запросить будет соответствовать my_left_iid и проверка его внутри функции всегда будет срабатывать, потому что с другим iid ваша функция не вызовется.
если же вместо второго параметра указывать
то будет и проверка компилятора
считаю продолжение диалога бесмысленным.
Переаттестация — отличный способ определить реальный уровень технической грамотности вашего отдела разработки ПО.
«предельно подробная выдача» — это лукавство. Вы в своем методе имеете не больше информации чем внутри ENTRY_FUNC или блайнда.
if (bBlind || InlineIsEqualGUID(*(pEntries->piid), iid)) { if (pEntries->pFunc == _ATL_SIMPLEMAPENTRY) //offset { ATLASSERT(!bBlind); IUnknown* pUnk = (IUnknown*)((INT_PTR)pThis+pEntries->dw); pUnk->AddRef(); *ppvObject = pUnk; return S_OK; } else //actual function call { HRESULT hRes = pEntries->pFunc(pThis, iid, ppvObject, pEntries->dw); if (hRes == S_OK || (!bBlind && FAILED(hRes))) return hRes; } }Хотите узнать удачным ли он был? блайнд функция в конец, попали в неё, запрашиваемый интерфес не нашли.
>>Где же здесь что-либо похожее не вызов InternalQueryInterface()?
файл atlcom.h хоть раз в жизни открывали? до atlbase.inl проходили?
То что вы описываете называется велосипедостроением и не знанием основ работы COM.
хотите ослеживать всё — вставьте в начало карты блайнд функцию, сохраняйте всё что угодно.
BEGIN_COM_MAP(CYetOtherImplementor) //следим за всеми интерфейсами, даже теми которые мы не поддерживаем COM_INTERFACE_ENTRY_FUNC_BLIND(0,myfunc) //самый первый элемент в карте ... //размещаем выше нужного интерфейса если нужно следить только за ним //COM_INTERFACE_ENTRY_FUNC(__uuidof(IComInterface3),0,myfunc_3) ... COM_INTERFACE_ENTRY(IComInterface1) COM_INTERFACE_ENTRY(IComInterface3) ... COM_INTERFACE_ENTRY(IComInterface10) ... END_COM_MAP() static HRESULT WINAPI myfunc(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw) { //do some loggin for params //riid -> clsid -> bstr, progid return E_NOINTERFACE; //заставить работать далее по карте } static HRESULT WINAPI myfunc_3(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw) { //do some loggin for params //riid always == __uuidof(IComInterface3) return E_NOINTERFACE; //заставить работать далее по карте }Для того чтобы отследить все запросы определенного интерфейса делаем так:
было:
BEGIN_COM_MAP(CYetOtherImplementor) ... COM_INTERFACE_ENTRY(IComInterface3) ... END_COM_MAP()стало:
BEGIN_COM_MAP(CYetOtherImplementor) ... COM_INTERFACE_ENTRY_FUNC(IID_IComInterface3,offsetofclass(IComInterface3, _ComMapClass),myfunc) ... END_COM_MAP() static HRESULT WINAPI myfunc(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw) { //do some loggin for params //default behavior IUnknown* pUnk = (IUnknown*)((INT_PTR)pv+dw); pUnk->AddRef(); *ppv = pUnk; return S_OK; }Если попытаетесь использовать интерфейс которого нет в базовых у CYetOtherImplementor будет вам предупреждение
> Остается ответить на вопрос, зачем нужно оставить форму ввода нового отзыва на странице с товаром, хотя ею никто не будет пользоваться.
О крупных недостатках обычно с большим удовольствием сообщают. И если продают / перепродают.