Мне интересно, как определить смарт-указатель COM в заголовочном файле в качестве члена класса? Вот что сделал:
В файле .cpp у меня есть:
long MyClass:MyFun(long &deviceCount)
{
RESULT h = CoInitialize(NULL);
MyComPtr ptr(__uuidof(MyComClass));
if(deviceCount > 0)
ptr->Connect();
}
Но так как другие функции должны использовать ptr, я подумываю изменить его на член класса и определить его в заголовочном файле, примерно так:
В .h файле:
MyComPtr _ptr;
затем в файле .cpp у меня есть:
_ptr(__uuidof(MyComClass));
Но компиляция не прошла, он говорит, что «термин не оценивает функцию, принимающую 1 аргумент». Я очень смущен, как я могу это реализовать. Есть идеи? Благодарю.
РЕДАКТИРОВАТЬ: Таким образом, чтобы использовать список инициализатора, это будет что-то вроде этого?
MyClass:MyClass() : _ptr(new MyCom)
{
_ptr(__uuidof(MyComClass));
}
Список инициализаторов вызывается во время построения для установки переменных, которые в противном случае были бы постоянными. Обычно он используется для константных переменных, ссылок и т. Д. На самом деле я не знаю COM, но если интеллектуальный указатель имеет аналогичную механику для ссылки (т. Е. После установки он не может быть перенаправлен), то его придется инициализировать во время построения, используя список инициализаторов.
Constructor() : _Ptr(new MyComObject)
{
// Other constructor stuff here
}
Синтаксис, вероятно, неправильный — как я уже сказал, я не знаю COM — но это может быть полезно?
РЕДАКТИРОВАТЬ:
Предполагая, что у вас есть следующий класс:
class MyClass
{
public:
MyClass(); // constructor
MyComPtr _ptr;
};
Затем в вашем .cpp определите ваш конструктор следующим образом:
MyClass::MyClass() : _ptr(__uuidof(MyComClass)
{
// rest of constructor code
}
Других решений пока нет …