Интересно было бы узнать по чему и для чего все строковые значения возвращаются в виде IDispatch что MS этим хотел сказать и что с ним еще можно полезного сделать кроме как ChangeType в нужный тип и соответсвенно есть ли смысл все свои строки тоже передавать в таком виде
P.S. Если это банальный вопрос неплохо было бы ссылочек подкинуть а то я не нашел :-(
Здравствуйте Аноним, вы писали:
А>Интересно было бы узнать по чему и для чего все строковые значения возвращаются в виде IDispatch что MS этим хотел сказать и что с ним еще можно полезного сделать кроме как ChangeType в нужный тип и соответсвенно есть ли смысл все свои строки тоже передавать в таком виде
А откуда ты Dictionary получаешь? Если от ASPшных объектов, то так все и должно быть. Там каждый Dictionary содержит в себе не строки, а Dictionary (т.к. в Request.Form("bla-bla") и т.п. может быть более одного значения.
Вот эти словари уже возвращают нормальные строки (если ты конвертишь словарь к строке, то ты просто получаешь дефолтовое значение).
А>P.S. Если это банальный вопрос неплохо было бы ссылочек подкинуть а то я не нашел :-(
Увы, я сам до этого доходил только на собственном опыте.
Re[2]: IRequestDictionary (BSTR as IDispatch)
От:
Аноним
Дата:
26.09.01 17:25
Оценка:
Здравствуйте Lexey, вы писали:
L>А откуда ты Dictionary получаешь? Если от ASPшных объектов, то так все и должно быть. Там каждый Dictionary содержит в себе не строки, а Dictionary (т.к. в Request.Form("bla-bla") и т.п. может быть более одного значения. L>Вот эти словари уже возвращают нормальные строки (если ты конвертишь словарь к строке, то ты просто получаешь дефолтовое значение).
Я догадался что можно конвертить а для чего так было сделано что явно строковое значение возвращаеться как VT_DISPATCH а не как VT_BSTR какой потаенный смысл во всем этом
наверно можно получить из этого dispatch еще какой то полезные интерфейс ;-)
Здравствуйте Аноним, вы писали:
А>Здравствуйте Lexey, вы писали:
L>>А откуда ты Dictionary получаешь? Если от ASPшных объектов, то так все и должно быть. Там каждый Dictionary содержит в себе не строки, а Dictionary (т.к. в Request.Form("bla-bla") и т.п. может быть более одного значения. L>>Вот эти словари уже возвращают нормальные строки (если ты конвертишь словарь к строке, то ты просто получаешь дефолтовое значение).
А>Я догадался что можно конвертить а для чего так было сделано что явно строковое значение возвращаеться как VT_DISPATCH а не как VT_BSTR какой потаенный смысл во всем этом
А>наверно можно получить из этого dispatch еще какой то полезные интерфейс ;-)
Невнимательно читаешь. Я же тебе написал, что любой RequestDictionary в ASP — двухуровневый.
Т.е. первый запрос тебе возвращает IDispatch нового RequestDictionary, в котором содержаться собственно строки. Через этот IDispatch ты можешь попросить IRequestDictionary этого самого Dictionary второго уровня. Когда ты конвертируешь этот диспатч в строку, ты просто неявно вызываешь
IRequestDictionary::get_Item(), который в этом случае возвращает все значения из словаря, разделенные ",".
Здравствуйте Lexey, вы писали:
L>Невнимательно читаешь. Я же тебе написал, что любой RequestDictionary в ASP — двухуровневый. L>Т.е. первый запрос тебе возвращает IDispatch нового RequestDictionary, в котором содержаться собственно строки. Через этот IDispatch ты можешь попросить IRequestDictionary этого самого Dictionary второго уровня. Когда ты конвертируешь этот диспатч в строку, ты просто неявно вызываешь L>IRequestDictionary::get_Item(), который в этом случае возвращает все значения из словаря, разделенные ",".
L>Теперь более понятно?
Спасибо, если многоуровневый то понятно — это объяснение
Мне просто вот что смутило:
...
if ((hr = m_pIRequest->get_ServerVariables (&pIDictionary)) == S_OK)
{
CComVariant Var ;
if ((hr = pIDictionary->get_Item (CComVariant ("CONTENT_TYPE"), &Var)) == S_OK)
{
..
Вот тут я получаю Var как VT_DISPATCH — как нибудь на досуге проверю может там действительно еще уровень есть