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

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

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


Ответ
 
Опции темы
Старый 07.09.2018, 17:32   #1
Maxim_St
Пользователь
 
Регистрация: 10.05.2017
Сообщений: 21
По умолчанию Функция из 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,455
По умолчанию

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

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

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

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

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

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как 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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS