ActiveX, BSTR и C++Builder 6
От: SterhBy  
Дата: 30.08.06 12:33
Оценка:
Люди, помогите с проблемкой.

Есть два ActiveX, которые я успешно подключил в C++Builder 6.
Допустим, это TCom1 и TCom2. Первый из них использует второй как параметр в некоторых методах.
У первого есть такой метод
TOLEBOOL __fastcall myProc1(LPDISPATCH* myCom2/*[in,out]*/, BSTR* status/*[in,out]*/);

Первый параметр — это и есть TCom2.
Второй параметр у меня есть в виде AnsiString, то-есть мне его нужно преобразовать в BSTR, а потом обратно в AnsiString, так как он меняется при вызове.
Собственно вопросы:
1. Как правильно передать первый параметр?
2. Как лучше конвертнуть из AnsiString в BSTR и обратно?

С TStringConverter не понятно как работать, может где нибудь есть примеры?
Вроде как для роботы с COM-объектами надо использовать TOleString ("TOleString wraps a BSTR"), но не понятно как...
Re: ActiveX, BSTR и C++Builder 6
От: prospan  
Дата: 30.08.06 13:15
Оценка:
Здравствуйте, SterhBy, Вы писали:

SB>2. Как лучше конвертнуть из AnsiString в BSTR и обратно?


Перевод из AnsiString в BSTR :
AnsiString SA;
BSTR BA;

BA = WideString(SA.c_str()).c_bstr();
Re[2]: ActiveX, BSTR и C++Builder 6
От: SterhBy  
Дата: 31.08.06 14:12
Оценка:
Здравствуйте, prospan, Вы писали:

P>Перевод из AnsiString в BSTR :

P>
P>AnsiString SA;
P>BSTR BA;

P>BA = WideString(SA.c_str()).c_bstr();
P>


Спасибо, с BSTR разобрался. В параметрах можно использовать тип WideString.
Тогда перевод туда и обратно тривиален:
String a = "sjdgh";
WideString w = WideString(a);
MyCom1->myProc1(MyCom2, &w);
a = String(w);

Это так, если кому вдруг понадобится...

А второй вопрос по поводу как получить LPDISPATCH* остается.
Кто поможет?
Re[3]: ActiveX, BSTR и C++Builder 6
От: Danchik Украина  
Дата: 31.08.06 14:29
Оценка:
Здравствуйте, SterhBy, Вы писали:

[Skip]

SB>А второй вопрос по поводу как получить LPDISPATCH* остается.

SB>Кто поможет?

Не понял... QueryInterface отменили?
Re[4]: ActiveX, BSTR и C++Builder 6
От: SterhBy  
Дата: 01.09.06 06:37
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Не понял... QueryInterface отменили?


Видимо пока не отменили, но я о нем все равно не знал.
Только вот вызвать его я не могу
[C++ Error] Main.cpp(49): E2247 '__stdcall TOleControl::QueryInterface(const _GUID &,void *)' is not accessible

Вот фрагмент обертки:
// *********************************************************************//
// COM Component Proxy Class Declaration
// Component Name : TMSComm
// Help String : Microsoft Comm Control 6.0
// Default Interface: IMSComm
// Def. Intf. Object: TCOMIMSComm
// Def. Intf. DISP? : No
// Event Interface: DMSCommEvents
// TypeFlags : (38) CanCreate Licensed Control
// *********************************************************************//

class PACKAGE TMSComm : public TOleControl
{
............
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.