Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.24;
Скачать: CL | DM;

Вниз

Помогите с 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
3-77271
roadstar
2002-05-29 12:38
2002.06.24
Помогите с SQL-запросом!!!


4-77673
RazorbladE
2002-04-18 08:53
2002.06.24
Внедрение в другой процесс


3-77267
Adventure
2002-05-30 11:43
2002.06.24
***** Поиск в Базах ***** (Помогите, серьезный вопрос!!!)


1-77436
Fly`
2002-06-10 16:05
2002.06.24
Не форматированный текст из RichEdit.


4-77657
Hammer
2002-04-20 16:08
2002.06.24
Каверзный вопрос