Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 07.09.2018, 17:32   #1
Maxim_St
Пользователь
 
Регистрация: 10.05.2017
Сообщений: 15
Репутация: 10
По умолчанию Функция из dll возвращает BSTR. Как правильно использовать?

Приветствую.

Исходника dll нет.
Справки нет.

Пример:

Код:

// dll
--------------
DllImport BSTR __stdcall Func1();
DllImport BSTR __stdcall Func2();
-------------


// как я использую
BSTR TempStr = Func1();
SetWindowTextW(EDA, TempStr);
SysFreeString(TempStr);

TempStr = Func2();
SetWindowTextW(EDT, TempStr);
SysFreeString(TempStr);


Правильно ли делаю?
Maxim_St на форуме   Ответить с цитированием
Старый 07.09.2018, 22:55   #2
Человек_Борща
Модератор
Заслуженный модератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Адрес: Республика Беларусь, г. Минск
Сообщений: 11,447
Репутация: 2769
По умолчанию

Непонятно кто управляет памятью. По идее Вы должны выделить буфер, куда разместятся данные.
BSTR - это WideString обычно.
Человек_Борща вне форума   Ответить с цитированием
Старый 08.09.2018, 02:14   #3
Maxim_St
Пользователь
 
Регистрация: 10.05.2017
Сообщений: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Непонятно кто управляет памятью
Память не выделяю.
Содержимое "Строки" получаю.
Ничего плохого не произойдет, в прекрасный момент времени, после SysFreeString?
Maxim_St на форуме   Ответить с цитированием
Старый 08.09.2018, 03:16   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,487
Репутация: 2073
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Непонятно кто управляет памятью. По идее Вы должны выделить буфер, куда разместятся данные.
Нет. BSTR - выделяет вызываемый, удаляет получивший.

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
BSTR - это WideString обычно.
Только с префиксом длины и указателем сразу на символы.

Цитата:
Сообщение от Maxim_St Посмотреть сообщение
Ничего плохого не произойдет, в прекрасный момент времени, после SysFreeString?
Ну если к строке не будете обращаться после, то не должно.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 08.09.2018, 03:51   #5
Maxim_St
Пользователь
 
Регистрация: 10.05.2017
Сообщений: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ну если к строке не будете обращаться после
Как в примере моем?
Или так нельзя?
Maxim_St на форуме   Ответить с цитированием
Старый 08.09.2018, 04:21   #6
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,487
Репутация: 2073
По умолчанию

Что в вашем примере? Вы же после освобождения строки переприсваиваете.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как dll возвращает значение в программу написанную на С++? WebbMan Общие вопросы C/C++ 4 04.12.2012 18:25
Delph. Функция из DLL возвращает 0. Oliveyra Помощь студентам 0 01.12.2011 10:43
Как правильно использовать MonthCalendar Shanuzina Компоненты Delphi 1 04.03.2010 12:58
как правильно использовать OR AND mpdasa Общие вопросы Delphi 2 19.01.2010 18:30
Функция StrtoFloat не правильно возвращает число Ra88it Помощь студентам 2 02.12.2008 21:26


18:05.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru