Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2018, 16:32   #1
Maxim_St
Пользователь
 
Регистрация: 10.05.2017
Сообщений: 23
По умолчанию Функция из 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, 21:55   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

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

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

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

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

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

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

Что в вашем примере? Вы же после освобождения строки переприсваиваете.
p51x на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как 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 11:58
как правильно использовать OR AND mpdasa Общие вопросы Delphi 2 19.01.2010 17:30
Функция StrtoFloat не правильно возвращает число Ra88it Помощь студентам 2 02.12.2008 20:26