Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с DLL разобраться! [D6, WinXP]


Aleksandr ©   (2002-06-11 14:56:00) 

Где можно почитать о приведении типов, чтобы функции из DLL можно было вызывать в программах на C и VB?
Например, в DLL я использовал функции, которые возвращают TList, TObjectList, TStringList. А смогут ли их воспринять другие языки, и чем эти типы можно заменить, если нет?


короед   (2002-06-11 19:46:00) [1]

2Игорь Шевченко
или LongWord, а в сях int или long?

если грузить обычный DLL в адрессное пространство программы
можно использовать обычные указатели на структуры.

если к-н COM-сервер то обычно все структуры загоняются в массивы Variant


Игорь Шевченко   (2002-06-11 17:52:00) [2]

32-х битное целое точно совместимо. Как оно обзывается лучше посмотреть по Help. В Delphi - LongInt


Aleksandr   (2002-06-11 17:23:00) [3]

Спасибо :) А integer точно со всеми совместим?


Игорь Шевченко   (2002-06-11 17:19:00) [4]

Pchar


Aleksandr   (2002-06-11 16:37:00) [5]

Понял... что не понял. Все, что мне нужно, это чтобы пользователь, вызвав мою функцию, получил список объектов и смог работать с элементами этого списка. Бог с ними, с экспортами типов, все можно и через Strings передать, разделив в строках поля элементов каким-нибудь значком, но вот как сам параметр TStrings объявить, чтобы он воспринимался из перечисленных языков?


Игорь Шевченко   (2002-06-11 16:14:00) [6]

Экспорт типов возможен только в пакетах (bpl).

Я не совсем понимаю, что вам требуется, потому и не могу дать внятного ответа.
type
TDistanceItem = record
Point1 : integer;
Point2 : integer;
Distance : integer;
Name : PChar;
end;
PDistanceItem = ^TDistanceItem;

DLL может экспортировать функцию, возвращающую указатель типа PDistanceItem. Это все требуется, если надо обеспечить совместимость с разными языками.


короед   (2002-06-11 16:10:00) [7]

Разве в VB можно вызывать DLL?
2Игорь Шевченко
если создать COM-сервер с поддержкой IDispatch, то проблем вообще никаких. Там уже все типы будут приведены


Aleksandr   (2002-06-11 16:05:00) [8]

Да не такая уж она и супер... А как это оформить? Что-то у меня в книжке нифига про экспорт типов не сказано :(...

Например, юзает DLL тип

TDistanceItem = class
Point1 : integer;
Point2 : integer;
Distance : integer;
Name : string;
end;

а функция, вызываемая из DLL, должна вернуть List таких итемов.
Насколько я понимаю, для всеобщей доступности тип должен выглядеть так:

TDistanceItem = class
Point1 : integer;
Point2 : integer;
Distance : integer;
Name : PChar;
end;

А вот как его сделать доступным в программе?


Игорь Шевченко   (2002-06-11 15:32:00) [9]

Да, соглашения о способе передачи параметров.

Можно. Но этот тип должны понимать все языки, программы на которых будут использовать эту супер-DLL


Aleksandr   (2002-06-11 15:23:00) [10]

Calling conventions - это что? Какие-то соглашения о вызовах?

А можно в DLL объявить тип, который могла бы импортировать программа? Если мне, например, надо вернуть функцией из DLL лист объектов нестандартного типа, а DCU заказчикам поставлять ну уж никак не хочется...


Игорь Шевченко   (2002-06-11 15:00:00) [11]

Кроме приведения типов есть еще calling conventions. Универсальной является stdcall.
Перечисленных типов больше нигде нет (разве что в C++ Builder)
Заменить можно самостоятельно разработанными структурами - TList простой. Желательно, без виртуальных методов


Наверх

Титульная страница Поиск, карта сайта Написать письмо