tag:blogger.com,1999:blog-1702873441071265539.post3456444360632456922..comments2023-05-29T19:02:20.570+03:00Comments on Блог GunSmoker-а: Ответ на задачку №9GunSmokerhttp://www.blogger.com/profile/15611696588191431330noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-1702873441071265539.post-52567025478031975532011-10-09T19:07:05.402+04:002011-10-09T19:07:05.402+04:00Речь про "A variant must be initialized using...Речь про "A variant must be initialized using VariantInit after creation and before it is passed to a function"?<br /><br />Если да, то лично я не вижу противоречия. Частное имеет более сильный приоритет, чем общее. "Должно быть" - если не оговорено иное. Ну а в данном случае - оговорено.<br /><br />Да дело даже не в этом. Аргумент не передаётся в функцию. Он из неё возвращается, он выходной. Очевидное правило для выходных параметров - они инициализируются в функции, а не в вызывающем коде. Мы сами не создаём вариантное значение, поэтому мы не вызываем VariantInit. Вариант создаёт функция - но тогда нам нужно убедится, что она не перезатрёт существующие данные. Именно для этого нужен VariantClear.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-48692288470812499632011-10-09T18:52:52.979+04:002011-10-09T18:52:52.979+04:00На самом деле в примере к IEnumVARIANT.Next() в MS...На самом деле в примере к IEnumVARIANT.Next() в MSDN написал индусский код, т.к. согласно куда более здравому http://support.microsoft.com/kb/104960 костыль с VariantClear() в коде клиента не нужен. Ну а как реализованы реальные конкретные провайдеры WMI - на совести их разработчиков, это да.Phodopusnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-4519529415117739902011-05-08T19:16:10.462+04:002011-05-08T19:16:10.462+04:00Ну собственно как я и говорил. Нужно добавить вызо...Ну собственно как я и говорил. Нужно добавить вызов VariantClear. Ктати давно пришел к выводу, что при чтении мсдн если не написано что эта функция ДЕЛАЕТ ЭТО, то считать что эта функция не делает этого, а не руководствоваться моделью вызова. Пару раз спотыкался об подобное, вот только сейчас уже не припомню где.<br /><br />p.s. Ну и всегда стоит поглядывать на комментарии, т.к. опечатки там встречаются и часто комментируются.MrShoorhttps://www.blogger.com/profile/14982166445380100334noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-31244981678754620122011-05-08T18:13:37.592+04:002011-05-08T18:13:37.592+04:00Мне кажется, что использование VariantInit вместо ...Мне кажется, что использование VariantInit вместо VariantClear внутри Next является багом. А необходимость в своем коде вызывать VariantClear - соответственно костыль. Впрочем не самый страшный. Мне вот недавно пришлось разбиратся с дропом файлов в окно проги при включенном UAC. Так без помощи форумов ничего бы у меня не вышло. В результате даже комент к статье в MSDN пришлось писать.Torbinsnoreply@blogger.com