![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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';