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

Вниз

Как написать Dll на Delphi 7 что-бы её можно было использовать ..   Найти похожие ветки 

 
Hottabxp ©   (2010-07-12 19:06) [0]

Написал DLL. Она експортирует несколько функций. Когда вызываю функции на masm32 без параметров - все прекрасно работает, но когда у функции есть параметры, программа завершается и вылазит окошко отправки ошибки в MS.
Код:
procedure Msg(mess:string); stdcall;
...
procedure Msg(mess: string);
begin
 ShowMessage(mess);
end;
...
exports
 Msg;
end.


 
Deltas ©   (2010-07-12 19:11) [1]

File -> New -> DLL. Самое главное - комментарий.

{ Important note about DLL memory management: ShareMem must be the
 first unit in your library"s USES clause AND your project"s (select
 Project-View Source) USES clause if your DLL exports any procedures or
 functions that pass strings as parameters or function results. This
 applies to all strings passed to and from your DLL--even those that
 are nested in records and classes. ShareMem is the interface unit to
 the BORLNDMM.DLL shared memory manager, which must be deployed along
 with your DLL. To avoid using BORLNDMM.DLL, pass string information
 using PChar or ShortString parameters.
}


 
DVM ©   (2010-07-13 00:21) [2]


> Hottabxp ©   (12.07.10 19:06) 

Посмотри как в винапи передаются строки.


 
TStas   (2010-07-14 23:55) [3]

Если вы её используете в приложении  на дельфях, то зачем StdCall писать? Это же сишное соглашение о вызове и строка там - это PChar. Варианта два:
1) Убрать StdCall
2) Передавать строку именно как PChar.
И вообще, разобраться зачем нужны соглашения о вызове, чем они отличаются и для чего используются.

А у меня самого вопрос: почему Дельфи вообще схавала этот код? Может, это просто недосмотр разработчиков Дельфей? Ведь уже на этапе компиляции известно, что код неработоспособен?

PS Ошибки в dll, если сами dll так уж критично нужны, очень гадкие, ведь это сторониий для приложения код.


 
Anatoly Podgoretsky ©   (2010-07-15 09:53) [4]

> TStas  (14.07.2010 23:55:03)  [3]

StdCall это не сишное, а стандартное соглашения и оно прекрасно работает в
Дельфи.

И чем же на этапе компиляции известно, что этот код не рабочий?


 
Anatoly Podgoretsky ©   (2010-07-15 09:57) [5]

Hottabxp ©   (12.07.10 19:06)  
Ты можешь вызывать этот код из MASM, но только ты должен делать это правильно, для этого нужно знание устройства длинных строк Дельфи. А может ты вообще с параметрами работаешь неверно. Пока ты не освоишь работы с ДЛЛ на ВЫ следует вообще избегать использование ДЛЛ и также поскольку это передача в другой/из другого языка, то надо использовать только простые типы, иначе всегда найдется Джо, который не в курсе об строках Дельфи, об массивах Дельфи и прочем. Ты посмотри на WinAPI а ведь ими пользуются не только из Дельфи или из MASM и все работает.


 
Deltas ©   (2010-07-15 12:39) [6]


> Если вы её используете в приложении  на дельфях, то зачем
> StdCall писать? Это же сишное соглашение о вызове и строка
> там - это PChar. Варианта два:
> 1) Убрать StdCall
> 2) Передавать строку именно как PChar.
> И вообще, разобраться зачем нужны соглашения о вызове, чем
> они отличаются и для чего используются.

Вот ты бы сел, да разобрался.


 
Anatoly Podgoretsky ©   (2010-07-15 13:19) [7]


> Deltas ©   (15.07.10 12:39) [6]

А это не слишком нагло с твоей стороны?


 
Deltas ©   (2010-07-15 13:49) [8]

Грубо, конечно



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

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

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1278925532
linuxoid
2010-07-12 13:05
2010.10.10
помогите с пингом


15-1279091543
Cannon
2010-07-14 11:12
2010.10.10
Помогите составить запрос в Interbase


2-1279379714
PinDOS
2010-07-17 19:15
2010.10.10
Ограничение доступных свойств и методов объекта


2-1279194682
Patrick
2010-07-15 15:51
2010.10.10
Макроподстановка.


15-1278780157
Jeer
2010-07-10 20:42
2010.10.10
Вот и я дошел до этой жизни..





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