Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-77602
ДедушкаКо
2002-05-17 13:45
2002.06.24
Ну я в районе Полевой-Индустриальной А ГДЕ ВЫ ну например хавк


4-77700
ATLANTIDO
2002-04-21 16:48
2002.06.24
Дочерние окна


1-77485
Tahion
2002-06-03 20:21
2002.06.24
Как в *.res файл записать иконку с полной палитрой?


1-77357
VDen
2002-06-12 20:17
2002.06.24
Взбесившийся указатель


1-77393
метеоролог
2002-06-13 10:50
2002.06.24
Quick Report file





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский