Вниз
Скачать: CL | DM;

Написание DLL   Найти похожие ветки 

← →
Flying home   (2004-04-06 17:35) [0]

Господа! Подскажите статьи, в которых бы доступно описывались принципы передачи и возвращения параметров функций из DLL и обратно. Короче, желательно написать DLL, которую могли бы юзать EXE, написанные не на Delphi без использования менеджеров памяти.


← →
Матлабист   (2004-04-06 17:51) [1]

Для экспортируемых функций:
 1) Не использовать в параметрах и в возращаемом значении такие типы, как string, TObject, ... Максимум interface.
 2) Использовать соглашения вызова stdcall (желательно)


← →
Flying home   (2004-04-06 18:24) [2]

А PChar можно? В том-то и дело, что нужно строки и передавать, и получать.


← →
Suntechnic ©   (2004-04-06 18:27) [3]

>Матлабист
... Максимум interface

И что ж это приложение написанное не на Delphi с этим типом делать то будет?


← →
Suntechnic ©   (2004-04-06 18:31) [4]

>Flying home
PChar можно. Только есть одно очень важное правило, касаемое не только PChar, а всего того, что передаётся в Dll:
Где память выделялась, там она и должна уничтожаться. Иначе проблем не оберёшься.


← →
Flying home   (2004-04-07 09:51) [5]

Вот именно эти проблемы меня и волнуют. Где прочитать об этом?
Желательно не просто строки передавать, но и record"ы из разных типов, в том числе и строки. И еще: передавать по ссылке, или по значению?


← →
Digitman ©   (2004-04-07 09:58) [6]


> Flying home



> передавать по ссылке, или по значению?


если речь идет о передаче структур и строк, то только по ссылке

строку вообще по значению невозможно не передать

структуру же размером до 8 байт в принципе можно и по значению передать, но это извращение


← →
Digitman ©   (2004-04-07 09:58) [7]


> Flying home



> передавать по ссылке, или по значению?


если речь идет о передаче структур и строк, то только по ссылке

строку вообще по значению невозможно передать

структуру же размером до 8 байт в принципе можно и по значению передать, но это извращение


← →
Flying home   (2004-04-07 11:01) [8]

Неужели нигде нет искомой инфы?
//Suntechnic
//Где память выделялась, там она и должна уничтожаться
Это как?


← →
DevelS   (2004-04-07 11:08) [9]

>>структуру же размером до 8 байт в принципе можно и по значению передать, но это извращение

почему именно  8 байт ? где написано про это ограничение?


← →
panov ©   (2004-04-07 11:12) [10]

>DevelS   (07.04.04 11:08) [9]

До 256 байт. Размер для передачи параметров через стек.


← →
DevelS   (2004-04-07 11:19) [11]

panov ©   (07.04.04 11:12) [10]:
уже лучьше :).


← →
Digitman ©   (2004-04-07 11:35) [12]


> DevelS


имелось виду - парой регистров edx:eax

стек не имелся ввиду, ибо надо быть круглым идиотом для передачи по значению структур большего размера через стек


← →
Flying home   (2004-04-07 12:26) [13]

Чем умничать, лучше бы ответом помогли...


← →
Игорь Шевченко ©   (2004-04-07 13:34) [14]


> Чем умничать, лучше бы ответом помогли...


А сам уже не состоянии подумать/поискать ?


← →
Digitman ©   (2004-04-07 13:41) [15]


> Flying home


ты читал топик "Сalling conventions" в хэлпе ? вникал ? надо думать, ничего не понял из того что там написано ?


← →
Flying home   (2004-04-07 16:34) [16]

Прочитал. Понятно, но мало. В смысле мало написано. Зачем нужен борландовский менеджер памяти?
//Игорь Шевченко
См. мой вопрос.


← →
BiN ©   (2004-04-07 16:40) [17]

Прочитал. Понятно, но мало. В смысле мало написано.

ну а теперь ты перешел на след. уровень ->
-> теперь пришла пора читать Parameter passing (там же)


← →
Digitman ©   (2004-04-07 16:48) [18]


> Зачем нужен борландовский менеджер памяти?


для внутренних нужд программы, разработанной в среде Делфи или ВСВ

если вызвающий и вызываемый модули разработаны в этих средах, они при определенных условиях могут пользоваться одним и тем же упомянутым менеджером, при этом вызываемый код может запрашивать блоки памяти у менеджера, а вызывающий их освобождать

во всех иных случаях (за исключением случаев, когда использование конкретного менеджера памяти по соглашению между вызывающей и вызываемой сторонами) ответственность за выделение/перераспределение/освобождение памяти делить между сторонами вызова недопустимо


← →
Flying home   (2004-04-07 16:54) [19]

//Digitman
Thanks



Страницы: 1 вся ветка

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



Память: 0.49 MB
Время: 0.022 c
14-1083692176
Marina_S
2004-05-04 21:36
2004.05.23
Как просмотреть графический файл побайтно?


1-1084256372
FireMan_Alexey
2004-05-11 10:19
2004.05.23
Потоки


1-1083638054
Kair
2004-05-04 06:34
2004.05.23
Затирание формы


14-1083608530
Ricks
2004-05-03 22:22
2004.05.23
Чемпионат Мира по Снукеру


14-1083085696
Piter
2004-04-27 21:08
2004.05.23
Передача "Розыгрыш"




   Наверх