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

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

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

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

04.06.2008, 15:15. Просмотров 1022. Ответов 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 объекта
Посмотрите здесь:

Создание объекта в const методе - C++
Есть код:void OrderPart::_printDocument(const QString &filename) const { QPrintDialog *dialog = new QPrintDialog(this); ... ...

Изменение строки в методе - C++
Добрый день. сделал функцию на получения полного пути из короткого но при выходе из функции возникает ошибка HEAP CORRUPTION DETECTED ...

Нужно чтобы введённый студент в методе in вывелся на экран как в методе out - C++
#include<conio.h> #include<stdio.h> #include<iostream.h> #include<windows.h> #include<cstring.h> // это просто для русских...

Копирование массива (строки) в методе класса - C++
У меня есть класс, поле которого массив символов char* В конструкторе копий требуется копировать это поле для нового объекта. Я это...

Передача объекта в функцию - C++
Нужно передать в функцию void Openz(Array &a) { int**buff = a.getarr(); for (int i(0); i < 10; i++) { for (int j(0);...

Передача объекта в функцию - C++
подскажите что тут не так у меня?! /* * 5. Поле first — целое положительное число, часы; * поле second — целое положительное...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2008, 11:57     Передача строки в методе COM объекта
Еще ссылки по теме:

Передача объекта в метод - C++
Объясните пожалуйста,как правильно написать. Есть метод AddMessage() который добавляет сообщение в тему,и есть метод GetMessage() который...

Передача объекта в метод - C++
void delete_value(string value, list<films> coll) coll передаётся как копия. После удаления из копии данные из списка, который был...

Передача объекта в метод класса - C++
здравствуйте. в процессе написания программы возник такой вопрос. можно ли при вызове метода некоторого класса для объекта А, передать в ...

Передача объекта аргументом в метод - C++
Итак, надо передать объект аргументом. Я его передал, нов методе должно измениться одно поле объекта. Но после выполнения метода оно не...

Передача объекта структуры по ссылке - C++
Здравствуйте. Нужно использовать передачу структуры по ссылке(или по указателю). Объясните пожалуйста как это делать и , если можно, как...

Классы: передача объекта в функцию - C++
class Distance // длина в английской системе { private: int feet; float inches; public: ...


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

Или воспользуйтесь поиском по форуму:
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 объекта
Ответ Создать тему
Опции темы

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