IRequestDictionary (BSTR as IDispatch)
От: Аноним  
Дата: 25.09.01 21:16
Оценка:
Интересно было бы узнать по чему и для чего все строковые значения возвращаются в виде IDispatch что MS этим хотел сказать и что с ним еще можно полезного сделать кроме как ChangeType в нужный тип и соответсвенно есть ли смысл все свои строки тоже передавать в таком виде

P.S. Если это банальный вопрос неплохо было бы ссылочек подкинуть а то я не нашел :-(
Re: IRequestDictionary (BSTR as IDispatch)
От: Lexey Россия  
Дата: 26.09.01 07:49
Оценка:
Здравствуйте Аноним, вы писали:

А>Интересно было бы узнать по чему и для чего все строковые значения возвращаются в виде 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 еще какой то полезные интерфейс ;-)
Re[3]: IRequestDictionary (BSTR as IDispatch)
От: Lexey Россия  
Дата: 26.09.01 18:26
Оценка:
Здравствуйте Аноним, вы писали:

А>Здравствуйте 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(), который в этом случае возвращает все значения из словаря, разделенные ",".

Теперь более понятно?
Re[4]: IRequestDictionary (BSTR as IDispatch)
От: SWAN Украина  
Дата: 26.09.01 19:15
Оценка:
Здравствуйте 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 — как нибудь на досуге проверю может там действительно еще уровень есть
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.