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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
webstyler
0 / 0 / 0
Регистрация: 03.01.2008
Сообщений: 5
#1

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

04.06.2008, 15:15. Просмотров 1001. Ответов 4
Метки нет (Все метки)

Имеется
C++
1
2
3
4
5
6
7
[id(6), helpstring('method q')] HRESULT q([out]BSTR *q1);
 
STDMETHODIMP CSomeClass::q(BSTR q1)
{
    *q1 = (BSTR)'Some string';
    return S_OK;
}
Все компилится отлично

В VB прицепляю этот COM и пытаюсь получить строку
Visual Basic
1
2
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++
Создание объекта в const методе C++
C++ Передача объекта в функцию
C++ Передача объекта класса в функцию С++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vita
Сообщений: n/a
04.06.2008, 17:49     Передача строки в методе COM объекта #2
C++
1
*q1 = SysAllocString(L'Some string');
или
C++
1
*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.

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

C++
1
2
USES_CONVERSION;
*q1 = SysAllocString(T2OLE(SomeVar));
Все отлично сработало
Yandex
Объявления
05.06.2008, 11:57     Передача строки в методе COM объекта
Ответ Создать тему
Опции темы

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