crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Не получается работать с COM библиотекой
giker
  опции профиля:
сообщение 18.11.2015, 18:07
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 18.5.2010
Пользователь №: 1731

Спасибо сказали: 0 раз(а)




Репутация:   0  


У меня есть COM библиотека написанная на VS2010. Я использовал утилиту dumpcpp и создал .h и .cpp файлы. Некоторые функции этой библиотеки требуют интерфейсы, которые описаны в этой библиотеке, в качестве параметров. Я могу получить эти интерфейсы, но когда я вызываю эти функции я получаю ошибку
/*
Class1, IClass1, Class2, IClass2 from files generated with dumpcpp
*/
Class1* obj1 = new Class1();
int count = obj1->Count(); // working fine

IClass1* iObj1 = NULL;
obj1->queryInterface(IID_IUnknown, reinterpret_cast<void**>(&iObj1));//working fine

Class2* obj2 = new Class2();
obj2->Init(iObj1); //QAxBase: Error calling IDispatch member Init: Non-optional parameter missing


Если я пытаюсь сделать то же самое в VS2010 (без Qt) то все работает. С одной лишь поправкой что в VS вызываются методы интерфейсов а не классов
IClass1* iboj1
IClass2* iboj2

CoCreateInstance(__uuidof(Class1), NULL, CLSCTX_ALL, __uuidof(IClass1), reinterpret_cast<void**>(&iboj1));
CoCreateInstance(__uuidof(Class2), NULL, CLSCTX_ALL, __uuidof(IClass2), reinterpret_cast<void**>(&iobj2));

iobj2->Init(iobj2);


Когда я пытаюсь делать нечто подобное c использованием QT то это не работает
/*
Class1, IClass1, Class2, IClass2 from files generated with dumpcpp
*/
Class1* obj1 = new Class1();
int count = obj1->Count(); // working fine

IClass1* iObj1 = NULL;
obj1->queryInterface(IID_IUnknown, reinterpret_cast<void**>(&iObj1));//working fine
Class2* obj2 = new Class2();
IClass2* iObj2 = NULL
obj2->queryInterface(IID_IUnknown, reinterpret_cast<void**>(&iObj2));//working fine
iobj2->Init(iObj1); //:-1: error: Exception at 0x759b7199, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance)

Если кто-нибудь знает, подскажите что я делаю не правильно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.11.2015, 6:24
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


При работе с Qt какой компиллер используешь?
Студийный или GCC/MinGW?
Если последний, то проблемы будут, он не полностью COM поддерживает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
giker
  опции профиля:
сообщение 19.11.2015, 16:20
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 18.5.2010
Пользователь №: 1731

Спасибо сказали: 0 раз(а)




Репутация:   0  


Использую компилятор Windows SDK for windows 7 (7.1.7600.30154) (x86) и VS2010 Qt библиотеки

Сообщение отредактировал giker - 19.11.2015, 16:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.11.2015, 6:15
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


В местах, где ты написал "working fine" указатель-то инициализируется?
Судя по последующей ошибке один из указателей не был инициализирован функцией queryInterface
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 4:20