Здраствуйте. Помогите решить проблему. Есть зарегистрированный ActiveX. Подключаю его к проекту. Включаю объектом в диалоговое окно. Вот описание функции в Н файле: VARIANT CVTAXSettings::StartPassword(const VARIANT& pwd). Вот описание функции в доке по ActiveX:VT_BOOL AXSettings.StartPassword ( VT_BSTR )
Вопрос: Как передать в функцию переменную типа СString и обработать ответ?
Здравствуйте ddmitrenko, 21.04.2001 10:08:26 вы писали:
>Здраствуйте. Помогите решить проблему. Есть зарегистрированный ActiveX. Подключаю его к проекту. Включаю объектом в диалоговое окно. Вот описание функции в Н файле: VARIANT CVTAXSettings::StartPassword(const VARIANT& pwd). Вот описание функции в доке по ActiveX:VT_BOOL AXSettings.StartPassword ( VT_BSTR ) > >Вопрос: Как передать в функцию переменную типа СString и обработать ответ? >
Как (откуда, какими средствами) получен .H файл?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте ddmitrenko, 22.04.2001 07:41:34 вы писали:
>>Как (откуда, какими средствами) получен .H файл? > >Сам образовался при добавлении к проекту ActiveX:)
Т.е. MFC'шным визардом. значит верить надо файлу, а не документации.
Можно конечно затолкать в вариант значение CString в ручную, но лучше воспользуйся классами CComVariant, CComBSTR.
Можно ещё сделать так, как написано здесь http://www.rsdn.ru/?article/?vcpp/import.xml
Здравствуйте 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
Не уверен насчёт AllocSysString, посмотри отладчиком, что там происходит внутри при присваивании, может память и без тебя выделяется. Но идея правильная.
>>Можно ещё сделать так, как написано здесь http://www.rsdn.ru/?article/?vcpp/import.xml
Здравствуйте IT, вы писали:
>>Например так правильно : >>CComVariant var1,var2; >>CString m_pwd; >>var1 = m_pwd.AllocSysString(); >>var2 = m_axset.StartPassword(var1);
>Не уверен насчёт AllocSysString, посмотри отладчиком, что там >происходит внутри при присваивании, может память и без тебя >выделяется. Но идея правильная.
Мне кажется, что веделать память обязан тот, кто отдает, а освобождать тот, кто берет.
А так как освободит отдающий, ведь не ясно берущему, сколько памяти нужно под строку, а отдающему когда память становиться не нужна
КГП>Мне кажется, что веделать память обязан тот, кто отдает, а освобождать тот, кто берет.
Логика должна быть такой выделяет память тот, кто отдает, кто получает — копирует ее и все ...
каждый удаляет когда надо
КГП>А так как освободит отдающий, ведь не ясно берущему, сколько памяти нужно под строку, а отдающему когда память становиться не нужна
Здравствуйте Жук Олег Олегович, вы писали:
ЖОО>Логика должна быть такой выделяет память тот, кто отдает, кто получает — копирует ее и все ...
копирует, говорите ... врядли ЖОО>каждый удаляет когда надо
Да что-то я не видел в примерах, что бы передающий освобождал
после AllocSysString ЖОО>поэтому и используют тип BSTR
скорее всего отдающий 'нагружает' BSTR, а берущий 'разгружает' и BSTR это делает самостоятельно без вмешательства берущего.
Здравствуйте Корнилов Григорий Петрович, Вы писали:
КГП>Здравствуйте Жук Олег Олегович, вы писали:
ЖОО>>Логика должна быть такой выделяет память тот, кто отдает, кто получает — копирует ее и все ... КГП>копирует, говорите ... врядли ЖОО>>каждый удаляет когда надо КГП>Да что-то я не видел в примерах, что бы передающий освобождал КГП>после AllocSysString ЖОО>>поэтому и используют тип BSTR КГП>скорее всего отдающий 'нагружает' BSTR, а берущий 'разгружает' и BSTR это делает самостоятельно без вмешательства берущего.
Здравствуйте Корнилов Григорий Петрович, Вы писали:
КГП>Здравствуйте Жук Олег Олегович, вы писали:
ЖОО>>Логика должна быть такой выделяет память тот, кто отдает, кто получает — копирует ее и все ... КГП>копирует, говорите ... врядли ЖОО>>каждый удаляет когда надо КГП>Да что-то я не видел в примерах, что бы передающий освобождал КГП>после AllocSysString ЖОО>>поэтому и используют тип BSTR КГП>скорее всего отдающий 'нагружает' BSTR, а берущий 'разгружает' и BSTR это делает самостоятельно без вмешательства берущего.
Мне просто неловко об этом говорить, но правила описаны в RTFM://"Article 3. Strings the OLE Way"/"The Eight Rules of BSTR"