Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.013 c
4-77692
Atrem
2002-04-26 23:58
2002.06.24
Регистрация своего класса


1-77369
Yuri Btr
2002-06-13 13:03
2002.06.24
CreateProcessWithLogonW


1-77337
Sticky Fingaz
2002-06-06 20:25
2002.06.24
Интернет в локалке


7-77642
KLM
2001-12-17 06:33
2002.06.24
Резидентные программы


1-77330
Doctor Deejay
2002-06-10 20:01
2002.06.24
Двигать содержимое ScrollBar сразу при передвигании лифтика




   Наверх