Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

DLL   Найти похожие ветки 

 
Максим   (2007-12-05 13:43) [0]

Добрый день!
Приложение вылетает при обращении к библиотеке.
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";


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


 
KSergey ©   (2007-12-05 13:45) [1]

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

Что??

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

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

и

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


 
Palladin ©   (2007-12-05 13:46) [2]

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


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


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


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


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


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


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


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


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

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

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


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

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


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


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


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


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


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

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


 
{RASkov} ©   (2007-12-05 14:38) [9]

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

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

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


 
{RASkov} ©   (2007-12-05 14:39) [10]

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

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


 
sniknik ©   (2007-12-05 14:40) [11]

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


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


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


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

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


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


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


Эт точно (с)


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


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

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

Касаемо


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

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

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


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


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


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

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



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

Текущий архив: 2007.12.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
2-1196767210
Егоров А.Н.
2007-12-04 14:20
2007.12.30
получить локальный IP-адрес компьютера


2-1196762672
Леони
2007-12-04 13:04
2007.12.30
SQL и Delphi


15-1196153253
Evanescence
2007-11-27 11:47
2007.12.30
Сколько стоит лицензионная Windows 2003 Server?


15-1196334922
xayam
2007-11-29 14:15
2007.12.30
помогите перевести с английского


2-1196851391
Максим
2007-12-05 13:43
2007.12.30
DLL