![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с 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 простой. Желательно, без виртуальных методов