![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Написание DLL [D7, Win2k, WinXP]
Flying home © (2004-04-06 17:35:00)Господа! Подскажите статьи, в которых бы доступно описывались принципы передачи и возвращения параметров функций из DLL и обратно. Короче, желательно написать DLL, которую могли бы юзать EXE, написанные не на Delphi без использования менеджеров памяти.
Flying home (2004-04-07 16:54:00) [1]//Digitman
Thanks
Digitman (2004-04-07 16:48:00) [2]
> Зачем нужен борландовский менеджер памяти?
для внутреннихнужд программы, разработанной в среде Делфи или ВСВ
если вызвающий и вызываемый модули разработаны в этих средах, они при определенных условиях могут пользоваться одним и тем же упомянутым менеджером, при этом вызываемый код может запрашивать блоки памяти у менеджера, а вызывающий их освобождать
во всех иных случаях (за исключением случаев, когда использование конкретного менеджера памяти по соглашению между вызывающей и вызываемой сторонами) ответственность за выделение/перераспределение/освобождение памяти делить между сторонами вызова недопустимо
BiN (2004-04-07 16:40:00) [3]Прочитал. Понятно, но мало. В смысле мало написано.
ну а теперь ты перешел на след. уровень ->
-> теперь пришла пора читать Parameter passing (там же)
Flying home (2004-04-07 16:34:00) [4]Прочитал. Понятно, но мало. В смысле мало написано. Зачем нужен борландовский менеджер памяти?
//Игорь Шевченко
См. мой вопрос.
Digitman (2004-04-07 13:41:00) [5]
> Flying home
ты читал топик "Сalling conventions" в хэлпе ? вникал ? надо думать, ничего не понял из того что там написано ?
Игорь Шевченко (2004-04-07 13:34:00) [6]
> Чем умничать, лучше бы ответом помогли...
А сам уже не состоянии подумать/поискать ?
Flying home (2004-04-07 12:26:00) [7]Чем умничать, лучше бы ответом помогли...
Digitman (2004-04-07 11:35:00) [8]
> DevelS
имелось виду - парой регистров edx:eax
стек не имелся ввиду, ибо надо быть круглым идиотом для передачи по значению структур большего размера через стек
DevelS (2004-04-07 11:19:00) [9]panov © (07.04.04 11:12) [10]:
уже лучьше :).
panov (2004-04-07 11:12:00) [10]>DevelS (07.04.04 11:08) [9]
До 256 байт. Размер для передачи параметров через стек.
DevelS (2004-04-07 11:08:00) [11]>>структуру же размером до 8 байт в принципе можно и по значению передать, но это извращение
почему именно 8 байт ? где написано про это ограничение?
Flying home (2004-04-07 11:01:00) [12]Неужели нигде нет искомой инфы?
//Suntechnic
//Где память выделялась, там она и должна уничтожаться
Это как?
Digitman (2004-04-07 09:58:00) [13]
> Flying home
> передавать по ссылке, или по значению?
если речь идет о передаче структур и строк, то только по ссылке
строку вообще по значению невозможно передать
структуру же размером до 8 байт в принципе можно и по значению передать, но это извращение
Digitman (2004-04-07 09:58:00) [14]
> Flying home
> передавать по ссылке, или по значению?
если речь идет о передаче структур и строк, то только по ссылке
строку вообще по значению невозможно не передать
структуру же размером до 8 байт в принципе можно и по значению передать, но это извращение
Flying home (2004-04-07 09:51:00) [15]Вот именно эти проблемы меня и волнуют. Где прочитать об этом?
Желательно не просто строки передавать, но и record'ы из разных типов, в том числе и строки. И еще: передавать по ссылке, или по значению?
Suntechnic (2004-04-06 18:31:00) [16]>Flying home
PChar можно. Только есть одно очень важное правило, касаемое не только PChar, а всего того, что передаётся в Dll:
Где память выделялась, там она и должна уничтожаться. Иначе проблем не оберёшься.
Suntechnic (2004-04-06 18:27:00) [17]>Матлабист
... Максимум interface
И что ж это приложение написанное не на Delphi с этим типом делать то будет?
Flying home (2004-04-06 18:24:00) [18]А PChar можно? В том-то и дело, что нужно строки и передавать, и получать.
Матлабист (2004-04-06 17:51:00) [19]Для экспортируемых функций:
1) Не использовать в параметрах и в возращаемом значении такие типы, как string, TObject, ... Максимум interface.
2) Использовать соглашения вызова stdcall (желательно)