Object из указателя

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Object из указателя

Сообщение Vi » 24.03.2009 (Вт) 14:48

Хакер писал(а):Вообще, меня сильно беспокоит, почему когда я делал этот пример, я ввёлся в заблуждение.

Ты имеешь в виду этот код?
Код: Выделить всё
void __declspec(naked) MakeSecondPass(PTOKENRECORD pTkSq, LPVOID pNodeConstructor, IUnknown *pRoot)
{ ... }

extern "C" int __declspec(dllexport) DoIt(LPCSTR pInputString, LPVOID pNodeConstructor, IUnknown* &pRoot)
{ ...   
   if(Balance != 0)
   {
      pRoot->Release();
      pRoot = NULL;
      goto exit;
   }

   pRoot->AddRef();
   MakeSecondPass(TokenSequence, pNodeConstructor, pRoot);

Я не знаю.
1) [in,out] IUnknown* &pRoot по спецификации функции может ссылаться на NULL указатель, вследствие чего вызов Release() не пройдет. Это нужно учитывать.
2) Судя по описанию функции MakeSecondPass ничего серьезного с параметром pRoot быть не может, поскольку он является входным параметром [in]. Поэтому вызов pRoot->AddRef() является излишним, но поскольку это твои "потроха", которые могут иметь побочные эффекты, то имеешь право.

PS
Я не знаю, как бы я мог ответить не здесь, так что сорри за ОФФТОП.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Object из указателя

Сообщение Хакер » 24.03.2009 (Вт) 14:51

Нет, я не об этом, я о кишках "роутера". Там AddRef/Releas-инг пришлось делать как раз по таким правилам, какие я описал здесь выше изначально. В противном случае я имел стабильные крахи.

А то, что не проверяется pRoot == 0, так это ведь не конечная библиотека, а просто пример для tyomitch'а. Я там в топике написал, что ничего похожего на проверка ошибок искать не стоит.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

    TopList  
cron