Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: 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 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
1-1083747384
Islander
2004-05-05 12:56
2004.05.23
Как преобразовать параметр сообщения WM_SETTEXT в строку?


1-1084178886
glGLU
2004-05-10 12:48
2004.05.23
ShellExecute


8-1078183435
vosogop
2004-03-02 02:23
2004.05.23
Большая, очень большая картинка...


3-1083167030
Юрий
2004-04-28 19:43
2004.05.23
Индексация DBase III


7-1081847567
juiceman
2004-04-13 13:12
2004.05.23
Про сервисы ...