COM Типа ад. Призрачный компилятор переписывает мой код? - PullRequest
0 голосов
/ 26 октября 2011

Я работаю над проблемой более недели, поэтому я могу быть слепым, расстроенным или просто чокнутым.Пожалуйста, прости меня, но ....

В моем классе есть этот член:

IDevicePtr  devicePtr

функция хочет (IDevicePtr * ptr) в качестве параметра.

Я не могупередать devicePtr к нему, естественные причины:

cannot convert parameter 2 from 'IDevicePtr' to 'IDevicePtr *

НО ...

я также не могу передать & devicePtr к нему:

compiler screams: cannot convert parameter 2 from 'IDevice **' to 'IDevicePtr *'

Откуда это сделал**" родом из?Как я могу удовлетворить требования к параметру функции "IDevicePtr *", когда у меня есть объект IDevicePtr?

Извините за разочарование.Я провел последнюю неделю, пытаясь перехватить одно событие COM без использования ATL или MFC.Нет успехаЯ не смог найти живого человека, который когда-либо делал что-то подобное.

1 Ответ

2 голосов
/ 26 октября 2011

_COM_SMARTPTR_TYPEDEF определяет класс-оболочку указателя - вы можете думать о нем как о typedef IDevice *IDevicePtr, за исключением того, что ваши IDevicePtr автоматически выпускают и автоматически ссылаются.* вокруг.Обойдите IDevice * и оберните его в IDevicePtr, только если вы берете ссылку, или передайте IDevice **, если вы хотите вернуться по ссылке (вы можете взять адрес IDevicePtr, чтобы получить IDevice **).Не пытайтесь использовать IDevicePtr * для возврата по ссылке;это не удастся (это проблема, которую вы видите) из-за перегрузки operator&.

...