Форум: "Начинающим";
Текущий архив: 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