Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/39: Рейтинг темы: голосов - 39, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 29.03.2009
Сообщений: 11
1

DLL библиотеки и тип String

30.03.2009, 12:14. Просмотров 7022. Ответов 5
Метки нет (Все метки)


Delphi
1
Подскажите кто-нибудь как из DLL библиотеки передавать в программу данные типа String
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2009, 12:14
Ответы с готовыми решениями:

Dll библиотеки
Необходимо реализовать стек через Статическую и Динамическую загрузку Dll

Библиотеки dll
Всем привет, как зделать вывод процедуры из длл на нажатие кнопки код длл library cal; uses...

Создание Dll библиотеки
проблема с выводом результата на экран. Библиотку нужно создать для функции nalichie Function...

DLL динамические библиотеки
{так выглядит библиотека с библиотечной функцией} library bible; uses Sharemem, windows,...

5
4 / 4 / 0
Регистрация: 30.03.2009
Сообщений: 17
30.03.2009, 15:30 2
Создайте длл и внимательно прочтите коментарий (он на англ. языке, создаётся в начале dpr'овского файла), там как раз написано про строки и массивы.
Если строки не более 255 символов замените String на ShortString и проблемы передачи отпадут.
0
0 / 0 / 1
Регистрация: 29.03.2009
Сообщений: 11
30.03.2009, 22:08  [ТС] 3
я в английском не шпарю совсем а строки у меня длиннее чем 255 символов
0
4 / 4 / 0
Регистрация: 30.03.2009
Сообщений: 17
31.03.2009, 20:59 4
1. Учите английский.
2. При передачи строки из длл придется передавать ещё и её длину
Например, объявите такой тип:

Delphi
1
2
3
4
5
Type
 TDllString = Record
  Value:WideString;   // Юникод строка
  Size:Integer;         // Длинна строки
end;
И функции для заполнения и получения строки:

Delphi
1
2
3
4
5
6
7
8
9
10
11
Procedure SetDllString(Sourse:TDllString;, Str:WideString);
Begin
  Sourse.Value:=Str;
  Sourse.Size:=Length(Str);
end;
 
Procedure GetDllString(Sourse:TDllString):WideString;
Begin
  SetLength(Result, Sourse.Size);
  Result:=Sourse.Value;
end;
Код писал без проверки, но думаю сложностей быть не должно ...
0
2821 / 1630 / 252
Регистрация: 03.12.2007
Сообщений: 4,222
31.03.2009, 21:26 5
In English

Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters.

Важное замечание об управлении памятью DLL: если ваша DLL экспортирует какие-либо процедуры или функции, использующие строки в качестве параметров или результатов функций, первым модулем в разделах USES вашей библиотеки И вашего проекта должен быть ShareMem. Это относится ко всем строкам, передаваемым в и из DLL, в том числе находящимся внутри записей и классов. ShareMem - модуль-интерфейс для менеджера общей памяти BORLNDMM.DLL, который должен распространяться вместе с вашей DLL. Чтобы избежать использования BORLNDMM.DLL, передавайте информацию, используя параметры PChar или ShortString.
0
109 / 95 / 8
Регистрация: 19.02.2009
Сообщений: 312
01.04.2009, 22:58 6
Использовать String (AnsiString или ShortSting) в DLL крайне не желательно.

PChar (unsigned char *, указатель на массив char с символом-терминатором) - лучший вариант, не вызывает проблем и тоже очень удобен.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2009, 22:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Посмотреть библиотеки dll
Как посмотреть что там внутри libeay32.dll ssleay32.dll, вернее даже где найти от этих файлов...

Создание библиотеки dll
Есть исходные коды некоторого windows приложения и exe файл. Как мне на основе этих файлов создать...

Инжектирование DLL-Библиотеки в процесс
В прошлый раз создал тему "Как в Delphi перехватывать обращения к реестру?", там мне один умный...

Не работает функция из dll библиотеки
Здравствуйте. Помогите, пожалуйста, найти неполадки. В приложении нужно ввести в один Edit число, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.