Главная страница
    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.49 MB
Время: 0.034 c
9-1073595642
Zak3D[@Tm]
2004-01-09 00:00
2004.05.23
Image перестал двигаться.


1-1084120735
Автор
2004-05-09 20:38
2004.05.23
Загрузка из файла


3-1082724983
}|{yk
2004-04-23 16:56
2004.05.23
Понял где возникает ошибка в триггере


14-1083535516
Феликс
2004-05-03 02:05
2004.05.23
В сети завелся новый червь


1-1084300717
NataliaC
2004-05-11 22:38
2004.05.23
Шифрование (REDOC)





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