Форум: "Основная";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
ВнизПомогите с DLL разобраться! Найти похожие ветки
← →
Aleksandr (2002-06-11 14:56) [0]Где можно почитать о приведении типов, чтобы функции из DLL можно было вызывать в программах на C и VB?
Например, в DLL я использовал функции, которые возвращают TList, TObjectList, TStringList. А смогут ли их воспринять другие языки, и чем эти типы можно заменить, если нет?
← →
Игорь Шевченко (2002-06-11 15:00) [1]Кроме приведения типов есть еще calling conventions. Универсальной является stdcall.
Перечисленных типов больше нигде нет (разве что в C++ Builder)
Заменить можно самостоятельно разработанными структурами - TList простой. Желательно, без виртуальных методов
← →
Aleksandr (2002-06-11 15:23) [2]Calling conventions - это что? Какие-то соглашения о вызовах?
А можно в DLL объявить тип, который могла бы импортировать программа? Если мне, например, надо вернуть функцией из DLL лист объектов нестандартного типа, а DCU заказчикам поставлять ну уж никак не хочется...
← →
Игорь Шевченко (2002-06-11 15:32) [3]Да, соглашения о способе передачи параметров.
Можно. Но этот тип должны понимать все языки, программы на которых будут использовать эту супер-DLL
← →
Aleksandr (2002-06-11 16:05) [4]Да не такая уж она и супер... А как это оформить? Что-то у меня в книжке нифига про экспорт типов не сказано :(...
Например, юзает 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 16:10) [5]Разве в VB можно вызывать DLL?
2Игорь Шевченко
если создать COM-сервер с поддержкой IDispatch, то проблем вообще никаких. Там уже все типы будут приведены
← →
Игорь Шевченко (2002-06-11 16:14) [6]Экспорт типов возможен только в пакетах (bpl).
Я не совсем понимаю, что вам требуется, потому и не могу дать внятного ответа.
type
TDistanceItem = record
Point1 : integer;
Point2 : integer;
Distance : integer;
Name : PChar;
end;
PDistanceItem = ^TDistanceItem;
DLL может экспортировать функцию, возвращающую указатель типа PDistanceItem. Это все требуется, если надо обеспечить совместимость с разными языками.
← →
Aleksandr (2002-06-11 16:37) [7]Понял... что не понял. Все, что мне нужно, это чтобы пользователь, вызвав мою функцию, получил список объектов и смог работать с элементами этого списка. Бог с ними, с экспортами типов, все можно и через Strings передать, разделив в строках поля элементов каким-нибудь значком, но вот как сам параметр TStrings объявить, чтобы он воспринимался из перечисленных языков?
← →
Игорь Шевченко (2002-06-11 17:19) [8]Pchar
← →
Aleksandr (2002-06-11 17:23) [9]Спасибо :) А integer точно со всеми совместим?
← →
Игорь Шевченко (2002-06-11 17:52) [10]32-х битное целое точно совместимо. Как оно обзывается лучше посмотреть по Help. В Delphi - LongInt
← →
короед (2002-06-11 19:46) [11]2Игорь Шевченко
или LongWord, а в сях int или long?
если грузить обычный DLL в адрессное пространство программы
можно использовать обычные указатели на структуры.
если к-н COM-сервер то обычно все структуры загоняются в массивы Variant
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c