Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DLL [D7, XP]


Максим ©   (2007-12-05 13:43:00) 

Добрый день!
Приложение вылетает при обращении к библиотеке.
DLL:

library DLLTest;

uses
 SysUtils,
 Classes;

function Summ(X,Y:Integer):Integer; stdcall;
begin
 Result:=X+Y;
end;

exports
 Summ;

{$R *.res}

begin
end.


Онклик кнопки на форме:

procedure TForm1.Button1Click(Sender: TObject);
var
 r:integer;
begin
 r:=Summ(10,10);
 Label1.Caption:=IntToStr(r);
end;


После implementation я указываюю что ф-ция находится в библиотеке:

function Summ(X,Y:Integer):Integer; external 'DLLTest.dll';


При компиляции вроде бф проходит все без ошибок, однако....... =((


Сергей М.   (2007-12-05 15:05:00) [1]


> не ставлю цели написания некого кросплатфоменного проекта


О кроссплатформенности вообще и речи не идет - ты сам же в кач-ве платформы упомянул только Win32 и ничто более.

А речь с твоей подачи зашла о возможности или невозможности вызова твоей подпрограммы (с дифолтным дельфийским соглашением) из [под]программы, разрабатываемой в некоей иной (не дельфийской) среде разработки


Максим   (2007-12-05 14:55:00) [2]


> Кроме соблюдения собссно соглашения о вызове существует
> еще множество "подводных граблей", связанных со спецификой
> той или иной среды разработки.

Возможно вы и правы.
Но данном этапе я не ставлю цели написания некого кросплатфоменного проекта, я просто штудирую учебник, и пытаюсь не упустить что-то важное =)

Касаемо


> узнай порядок передачи пораметров в стек в Делфи и С++ и
> сделай вывод)

Обязательно детально разберусь. Но на данном этапе для меня сии поустулаты как дураку фантик =)

Еще раз благодарю всех за разяснения...


Сергей М.   (2007-12-05 14:43:00) [3]


> Проблемы будут на любом языке, если бездумно писать код


Эт точно (с)


Сергей М.   (2007-12-05 14:42:00) [4]


> Например Visual C++


Если СРР-программер будет знать, что предлагаемое тобой соглашение о вызове соответствует дифолтному дельфийскому, и программер этот знает все условия этого соглашения, то никаких проблем не возникнет.

Впрочем, это же у тебя пробная функция ?
Кроме соблюдения собссно соглашения о вызове существует еще множество "подводных граблей", связанных со спецификой той или иной среды разработки.


sniknik   (2007-12-05 14:40:00) [5]

> Например Visual C++
не верю что Visual C++ не имеет возможности указать модель вызова отличную от stdcall...
проблемы скорее будут от другого.


{RASkov}   (2007-12-05 14:39:00) [6]

> [8] Максим   (05.12.07 14:34)

узнай порядок передачи пораметров в стек в Делфи и С++ и сделай вывод)


{RASkov}   (2007-12-05 14:38:00) [7]

> [7] Сергей М. ©   (05.12.07 14:17)
> Смотря о каких "других" языках идет речь.

Проблемы будут на любом языке, если бездумно писать код)

А автор, при написании, не понял, что же делает деректива stdcall, да и не знай как до сих пор.... понял суть или нет (
:о)


Максим   (2007-12-05 14:34:00) [8]


> Смотря о каких "других" языках идет речь.

Например Visual C++


Сергей М.   (2007-12-05 14:17:00) [9]


> Читал что при обращении к функции без stdcall у программистов
> других языков будут проблемы


Смотря о каких "других" языках идет речь.


Максим   (2007-12-05 14:09:00) [10]

Ошибку свою я понял. Большое спасибо Всем, кто откликнулся =)


Максим   (2007-12-05 14:08:00) [11]

Читал что при обращении к функции без stdcallу программистов других языков будут проблемы...

Этот пример совершенно надуманный просто хотелось сделать по уму...


Ega23   (2007-12-05 13:57:00) [12]


> Максим   (05.12.07 13:43)


Либо убери stdcall в DLL, либо добавь stdcall в приложении.
Заодно почитай, что такое stdcall


Сергей М.   (2007-12-05 13:53:00) [13]


> Максим   (05.12.07 13:43)


> function Summ(X,Y:Integer):Integer; stdcall;


Зачем ? Просто щоб було или на то есть серьезноеоснование ?


Palladin   (2007-12-05 13:46:00) [14]

и какая скорость вылета? направление?


KSergey   (2007-12-05 13:45:00) [15]

> Максим   (05.12.07 13:43)  
> однако....... =((

Что??

К стати, обратите внимание и найдите все отличия:

function Summ(X,Y:Integer):Integer; stdcall;

и

function Summ(X,Y:Integer):Integer; external 'DLLTest.dll';


Наверх

Титульная страница Поиск, карта сайта Написать письмо