Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Написание 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 2.099 c
3-1083307934
pan
2004-04-30 10:52
2004.05.23
А есть ли набор компонет ADO для D4?


14-1083246980
Anthonys
2004-04-29 17:56
2004.05.23
Экспертная система


3-1082663773
Mishenka
2004-04-22 23:56
2004.05.23
Связи между таблицами в Database Desktop...


14-1083237452
SPeller
2004-04-29 15:17
2004.05.23
Как заработать денег?


4-1081345640
Comp
2004-04-07 17:47
2004.05.23
Шрифт





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский