Форум программистов, компьютерный форум CyberForum.ru

передача строки в методе COM объекта - C++

Войти
Регистрация
Восстановить пароль
 
webstyler
0 / 0 / 0
Регистрация: 03.01.2008
Сообщений: 5
04.06.2008, 15:15     передача строки в методе COM объекта #1
Имеется
[id(6), helpstring('method q')] HRESULT q([out]BSTR *q1);

STDMETHODIMP CSomeClass::q(BSTR q1)
{
*q1 = (BSTR)'Some string';
return S_OK;
}
Все компилится отлично
В VB прицепляю этот COM и пытаюсь получить строку
Dim str as String
oSome.q(str)
и тут мы вылетаем с ошибкой Out of memory
Так как мне вытащить строку из COM объекта
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2008, 15:15     передача строки в методе COM объекта
Посмотрите здесь:

C++ Передача объекта в метод
C++ Передача объекта по указателю в функцию
Передача объекта структуры по ссылке C++
C++ Копирование массива (строки) в методе класса
C++ Передача объекта в метод
C++ Передача итератора другого объекта
Нужно чтобы введённый студент в методе in вывелся на экран как в методе out C++
C++ Классы: передача объекта в функцию
Передача объекта в вызывающую функцию C++
Передача объекта в функцию C++
Создание объекта в const методе C++
C++ Передача объекта в функцию

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vita
Сообщений: n/a
04.06.2008, 17:49     передача строки в методе COM объекта #2
*q1 = SysAllocString(L'Some string');
или
*q1 = SysAllocString(OLESTR('Some string'));
webstyler
0 / 0 / 0
Регистрация: 03.01.2008
Сообщений: 5
04.06.2008, 18:02  [ТС]     передача строки в методе COM объекта #3
все это так но что если у меня передается не константная строка, а некоторая внутренняя переменная типа LPTSTR SomeVar??
Тогда *q1 = SysAllocString(LSomeVar); естественно не сработает
как мне перевести LPTSTR в BSTR?
штука типа *q1 = SysAllocString(L(SomeVar)); тож работать не будет
Вот BSTR в LPTSTR переводится при помощи USES CONVERSION W2A, а в обратную сторону как?
Я пробовал *q1 = SysAllocString((BSTR)SomeVar), так оно в какую-то нечитаемую галиматью переводит.
Что делать???????????
Vita
Сообщений: n/a
04.06.2008, 19:36     передача строки в методе COM объекта #4
Проще всего использовать обертки. Я использую CString и CComBSTR из atlbase.h. Можно использовать bstr_t или подобные. Нужно только понимать, что BSTR != LPTSTR и даже BSTR != LPOLESTR. зайди сюда http://www.rsdn.ru и поищи BSTR. Много узнаешь.

А BSTR всегда передаются через функцию BSTR SysAllocString(LPOLESTR sz)!

Тогда *q1 = SysAllocString(LSomeVar); естественно не сработает
как мне перевести LPTSTR в BSTR?
L и OLESTR - это макросы для констант.

штука типа *q1 = SysAllocString(L(SomeVar)); тож работать не будет
Вот BSTR в LPTSTR переводится при помощи USES CONVERSION W2A, а в обратную сторону как?
Наверное, A2W. Только не в BSTR, а LPOLESTR, точнее, LPWSTR.

Я бы так использовал:
Код
CComBSTR szBstr( SomeVar );
*q1 = szBstr.Detach();
или
Код
CComBSTR szBstr( 'Some string' );
*q1 = szBstr.Detach();
webstyler
0 / 0 / 0
Регистрация: 03.01.2008
Сообщений: 5
05.06.2008, 11:57  [ТС]     передача строки в методе COM объекта #5
Спасибо за совет, но я уже сделал

USES_CONVERSION;
*q1 = SysAllocString(T2OLE(SomeVar));

Все отлично сработало
Yandex
Объявления
05.06.2008, 11:57     передача строки в методе COM объекта
Ответ Создать тему
Опции темы

Текущее время: 01:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru