ActieX
От: ddmitrenko  
Дата: 21.04.01 16:08
Оценка:
Здраствуйте. Помогите решить проблему. Есть зарегистрированный ActiveX. Подключаю его к проекту. Включаю объектом в диалоговое окно. Вот описание функции в Н файле: VARIANT CVTAXSettings::StartPassword(const VARIANT& pwd). Вот описание функции в доке по ActiveX:VT_BOOL AXSettings.StartPassword ( VT_BSTR )

Вопрос: Как передать в функцию переменную типа СString и обработать ответ?
Re: ActieX
От: IT Россия linq2db.com
Дата: 21.04.01 19:57
Оценка:
Здравствуйте ddmitrenko, 21.04.2001 10:08:26 вы писали:

>Здраствуйте. Помогите решить проблему. Есть зарегистрированный ActiveX. Подключаю его к проекту. Включаю объектом в диалоговое окно. Вот описание функции в Н файле: VARIANT CVTAXSettings::StartPassword(const VARIANT& pwd). Вот описание функции в доке по ActiveX:VT_BOOL AXSettings.StartPassword ( VT_BSTR )

>
>Вопрос: Как передать в функцию переменную типа СString и обработать ответ?
>

Как (откуда, какими средствами) получен .H файл?
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: ActieX
От: ddmitrenko  
Дата: 22.04.01 13:41
Оценка:
Здравствуйте IT, 21.04.2001 13:57:52 вы писали:

>Здравствуйте ddmitrenko, 21.04.2001 10:08:26 вы писали:

>
>Как (откуда, какими средствами) получен .H файл?

Сам образовался при добавлении к проекту ActiveX:)
Re[3]: ActieX
От: IT Россия linq2db.com
Дата: 22.04.01 14:08
Оценка:
Здравствуйте ddmitrenko, 22.04.2001 07:41:34 вы писали:

>>Как (откуда, какими средствами) получен .H файл?

>
>Сам образовался при добавлении к проекту ActiveX:)

Т.е. MFC'шным визардом. значит верить надо файлу, а не документации.
Можно конечно затолкать в вариант значение CString в ручную, но лучше воспользуйся классами CComVariant, CComBSTR.
Можно ещё сделать так, как написано здесь http://www.rsdn.ru/?article/?vcpp/import.xml
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: ActieX
От: ddmitrenko  
Дата: 23.04.01 18:36
Оценка:
Здравствуйте IT, 22.04.2001 08:08:13 вы писали:

>Здравствуйте ddmitrenko, 22.04.2001 07:41:34 вы писали:

>
>Можно конечно затолкать в вариант значение CString в ручную, но лучше воспользуйся классами CComVariant, CComBSTR.
Например так правильно :
CComVariant var1,var2;
CString m_pwd;
var1 = m_pwd.AllocSysString();
var2 = m_axset.StartPassword(var1);
>Можно ещё сделать так, как написано здесь http://www.rsdn.ru/?article/?vcpp/import.xml
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
.

В этой строке MSFlexGridLib::IMSFlexGridPtr I;
Откуда берется IMSFlexGridPtr?
Re[5]: ActieX
От: IT Россия linq2db.com
Дата: 23.04.01 19:41
Оценка:
>Например так правильно :
>CComVariant var1,var2;
>CString m_pwd;
>var1 = m_pwd.AllocSysString();
>var2 = m_axset.StartPassword(var1);

Не уверен насчёт AllocSysString, посмотри отладчиком, что там происходит внутри при присваивании, может память и без тебя выделяется. Но идея правильная.

>>Можно ещё сделать так, как написано здесь http://www.rsdn.ru/?article/?vcpp/import.xml
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
.


>В этой строке MSFlexGridLib::IMSFlexGridPtr I;

>Откуда берется IMSFlexGridPtr?

Смотри выше по тексту статьи
#import <MSFLXGRD.OCX>
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: ActieX
От: Корнилов Григорий Петрович http://kornilow.newmail.ru
Дата: 15.05.01 07:39
Оценка:
Здравствуйте IT, вы писали:

>>Например так правильно :

>>CComVariant var1,var2;
>>CString m_pwd;
>>var1 = m_pwd.AllocSysString();
>>var2 = m_axset.StartPassword(var1);

>Не уверен насчёт AllocSysString, посмотри отладчиком, что там >происходит внутри при присваивании, может память и без тебя >выделяется. Но идея правильная.


Мне кажется, что веделать память обязан тот, кто отдает, а освобождать тот, кто берет.
А так как освободит отдающий, ведь не ясно берущему, сколько памяти нужно под строку, а отдающему когда память становиться не нужна
Re[7]: ActieX
От: Жук Олег Олегович Россия http://www.mediachase.ru
Дата: 16.05.01 10:26
Оценка:
КГП>Мне кажется, что веделать память обязан тот, кто отдает, а освобождать тот, кто берет.

Логика должна быть такой выделяет память тот, кто отдает, кто получает — копирует ее и все ...
каждый удаляет когда надо

КГП>А так как освободит отдающий, ведь не ясно берущему, сколько памяти нужно под строку, а отдающему когда память становиться не нужна


поэтому и используют тип BSTR
С уважением, OlegO.
Re[8]: ActieX
От: Корнилов Григорий Петрович http://kornilow.newmail.ru
Дата: 17.05.01 11:03
Оценка:
Здравствуйте Жук Олег Олегович, вы писали:

ЖОО>Логика должна быть такой выделяет память тот, кто отдает, кто получает — копирует ее и все ...

копирует, говорите ... врядли
ЖОО>каждый удаляет когда надо
Да что-то я не видел в примерах, что бы передающий освобождал
после AllocSysString
ЖОО>поэтому и используют тип BSTR
скорее всего отдающий 'нагружает' BSTR, а берущий 'разгружает' и BSTR это делает самостоятельно без вмешательства берущего.
Re[9]: ActieX
От: Dima2  
Дата: 03.11.01 18:55
Оценка:
Здравствуйте Корнилов Григорий Петрович, Вы писали:

КГП>Здравствуйте Жук Олег Олегович, вы писали:


ЖОО>>Логика должна быть такой выделяет память тот, кто отдает, кто получает — копирует ее и все ...

КГП>копирует, говорите ... врядли
ЖОО>>каждый удаляет когда надо
КГП>Да что-то я не видел в примерах, что бы передающий освобождал
КГП>после AllocSysString
ЖОО>>поэтому и используют тип BSTR
КГП>скорее всего отдающий 'нагружает' BSTR, а берущий 'разгружает' и BSTR это делает самостоятельно без вмешательства берущего.

    COSERVERINFO csi = {0};
    csi.pwszName = L"localhost";

    MULTI_QI qi[1] = {0};
    qi[0].pIID = &IID_IBoris;
    qi[0].pItf = NULL;
    qi[0].hr = S_OK;

    hr = CoCreateInstanceEx(clsid,
                          NULL,
                          CLSCTX_REMOTE_SERVER,
                          &csi,
                          1,
                          qi);
Re[9]: ActieX
От: George_Seryakov Россия  
Дата: 07.11.01 19:46
Оценка:
Здравствуйте Корнилов Григорий Петрович, Вы писали:

КГП>Здравствуйте Жук Олег Олегович, вы писали:


ЖОО>>Логика должна быть такой выделяет память тот, кто отдает, кто получает — копирует ее и все ...

КГП>копирует, говорите ... врядли
ЖОО>>каждый удаляет когда надо
КГП>Да что-то я не видел в примерах, что бы передающий освобождал
КГП>после AllocSysString
ЖОО>>поэтому и используют тип BSTR
КГП>скорее всего отдающий 'нагружает' BSTR, а берущий 'разгружает' и BSTR это делает самостоятельно без вмешательства берущего.

Мне просто неловко об этом говорить, но правила описаны в RTFM://"Article 3. Strings the OLE Way"/"The Eight Rules of BSTR"
GS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.