| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > COM-компонент возвращает клиенту нулевые указатели |
| Автор: yaprogrammer 7.10.2009, 13:00 | ||||
| При первом запуске клиента все проходит нормально. При Debugе клиента все проходит нормально. При втором и последующих запусках возращает нулевой указатель. Сервер всегда пишет в лог правильные данные. Код клиента
Код компонента
|
| Автор: jonie 7.10.2009, 15:19 |
| yaprogrammer, ну и ? Отладчик запретили что ли? Отлаживайте компонент - кто вам мешает ? Наставьте assert-ов наконец... |
| Автор: yaprogrammer 8.10.2009, 09:44 |
| А подскажите пожалуйста как отлаживать компонент в msvc 6.0? |
| Автор: jonie 8.10.2009, 11:25 |
| yaprogrammer, абсолютно также как и в VS2010. Стартуете отладчик, только запускаемым exe-шником (студия спросит вас) указываете нечто, что ипользует ваш компонент (да хоть IE например). И всё. |
| Автор: yaprogrammer 9.10.2009, 10:02 | ||
| jonie Я так понимаю, что это работает для компонента в dll. А у меня компонент реализован в exe. Andrey44 Вставил проверку на пустой указатель - память выделяется нормально. Уже начал грешить на код IDL:
И является ли правильным выделение памяти с помощью CoTaskMemAlloc когда компонент и клиент в разных процессах? |
| Автор: Andrey44 9.10.2009, 10:42 | ||||
|
| Автор: yaprogrammer 9.10.2009, 10:46 |
| Нулевой указатель pphServer и ppErrors. |
| Автор: Andrey44 9.10.2009, 10:52 | ||
Что-то я вас не пойму. Покажите как проверяете |
| Автор: yaprogrammer 9.10.2009, 10:58 | ||
После выделения памяти на сервере проверяю так
|
| Автор: Andrey44 9.10.2009, 11:49 | ||
| Так где-же возвращается нулевой указатель? Сделайте так
|| *ppErrors == NULL я думаю проверять не надо, так как обычно ppErrors == NULL при успешном выполнении функции. По этому вы постоянно и возвращаете из функции E_OUTOFMEMORY |
| Автор: xvr 9.10.2009, 12:02 |
| Судя по IDL у вас интерфейс IX dispinterface и dual, но типы параметров pphServer и ppErrors несовместимы с dispinterface Какой код возврата (hr в клиенте в строке 6)? |
| Автор: yaprogrammer 9.10.2009, 13:20 | ||
| Cоздал новый компонент, указал другие uuid, сделал проверку на пустой указатель как говорил Andrey44. Теперь возвращает не пустые указатели. но значения не те, точнее только первое значение массива то: На сервере записываю следующие значения: 10, 11, 12, 13, 14 А на клиенте считываю: 10, 0, 1296387404, 8, 1244932 При этом код возврата функции hr = 0.
xvr, а какими они должны быть? |
| Автор: xvr 9.10.2009, 13:58 | ||||||||
Похоже size_is считается в байтах, а не в элементах (что логично). Попробуйте так
А вам точно нужен dispinterface? Может и обычного IUnknown хватит? |