Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача unicode строки в dll (c++builder 2010), Передача unicode строки в dll (c++builde 
V
    Опции темы
sasha35
Дата 1.4.2010, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



Как правильно передавать unicode строки в dll (c++builder 2010)?
PM MAIL WWW   Вверх
Alexeis
Дата 1.4.2010, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



sasha35, и то и другое билдер? Самый простой вариант WideString. Комвская строка не требует общего менеджера памяти.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sasha35
Дата 2.4.2010, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



На сегодняшний день и приложение и Dll - Builder. Но в дальнейшем возможно Dll будут разрабатываться и не в Builder.

Не хотелось бы как раз использовать общий менеджер памяти. 
А может вместо WideString, использовать какой-нибудь wchar, wchar_t?
PM MAIL WWW   Вверх
Alexeis
Дата 2.4.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(sasha35 @  2.4.2010,  07:19 Найти цитируемый пост)
А может вместо WideString, использовать какой-нибудь wchar, wchar_t? 

  Запросто, но WideString тоже не плохой вариант. Билдер автоматически определяет строку WideString как комовский BSTR . Т.е. для другого компилятора С++ следует прототип описать как BSTR . Можно даже в заголовке написать #ifndef __BORLANDC__ #define WideString BSTR #endif
  Это все нужно только в том, случае если выделение памяти произошло в одном модуле а освобождение в другом. Если таких операций не будет, то wchar_t* вполне подойдет. Проблема в том, что если строка wchar_t* передается в DLL, то DLL не знает была ли она выделена в стеке или куче, если в куче, то как к ней обратиться чтобы освободить. WideString/BSTR всегда выделяется при помощи комовской кучи, поэтому освобождение памяти очевидно. Это особенно важно, когда вы возвращаете строку из функции как результат.
  При использовании wchar_t* я бы рекомендовал всегда указывать константность указателя. Т.е. писать const wchar_t* (LPCWSTR) . Это предостережет от попыток произвести что-то некорректное с ней. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sasha35
Дата 2.4.2010, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



Значит Вы рекомендуете WideString.

Спасибо, за понимание
PM MAIL WWW   Вверх
Alexeis
Дата 2.4.2010, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(sasha35 @  2.4.2010,  08:15 Найти цитируемый пост)
Значит Вы рекомендуете WideString.

  Не забывайте, что удаление такой строки из модуля написанного не в билдере нужно производить функцией SysFreeString, а не delete[] , кроме того возможно понадобиться подключить заголовочный файл "oleauto.h". Для билдера это автоматическая строка, за памятью которой не нужно следить. Кроме того это переносимо между любыми версиями билдера которые только поддерживают WideString.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sasha35
Дата 2.4.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 1.10.2008

Репутация: нет
Всего: нет



Спасибо!

Это сообщение отредактировал(а) sasha35 - 2.4.2010, 12:04
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.