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

Вниз

проблема с DLL   Найти похожие ветки 

 
Al_jus   (2005-07-23 05:57) [0]

Добрый вечер!
У меня возникла следующая проблема - ниже приведен код программы и код ДЛЛ, которая вызывает ошибку.

код программы:
..............
var
 Form1: TForm1;

 getDayOfWeek :function(a:integer):integer;
 LibHandle : THandle;
implementation

{$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);
begin
 @getDayOfWeek := nil;
 LibHandle := LoadLibrary("MyDLL.DLL");
 if LibHandle >= 32 then
 begin
   @getDayOfWeek := GetProcAddress(LibHandle,"getDayOfWeek");
   if @getDayOfWeek <> nil then

     ShowMessage(inttostr(getDayOfWeek(7)));
 end;
 FreeLibrary(LibHandle);

end;

......................

код ДЛЛ:
......................
function getDayOfWeek(a :integer):integer; stdcall;
begin
 result := a;
end;

exports getDayOfWeek;

begin
end.

......................

проблема состоит в том, что мне не возвращается значение а, а возвращается черт знает что :(
Да еще и ошибка при этом возникает!
Помогите разобраться и понять!

Заранее спасибо!


 
alex-drob ©   (2005-07-23 10:27) [1]

Добавь в приложении stdcall;

getDayOfWeek :function(a:integer):integer;stdcall;

или убери в библиотеке

function getDayOfWeek(a :integer):integer;


 
isasa ©   (2005-07-23 11:47) [2]

stdcall; - везде.
приложение

getDayOfWeek :function(a:integer):integer; stdcall;

DLL

function getDayOfWeek(a :integer):integer; stdcall;


 
Leonid Troyanovsky ©   (2005-07-23 11:53) [3]


> isasa ©   (23.07.05 11:47) [2]
> stdcall; - везде.


Нигде - проще.

--
Regards, LVT.


 
begin...end ©   (2005-07-23 11:54) [4]

Здесь не видно преимуществ использования stdcall. Поэтому его лучше убрать. И там, и там.


 
begin...end ©   (2005-07-23 11:55) [5]

> Leonid Troyanovsky ©   (23.07.05 11:53) [3]
> Нигде - проще.

И быстрее.


 
isasa ©   (2005-07-23 12:32) [6]

>Здесь не видно преимуществ использования stdcall.

Руководствовался простой мыслью:

If you want your library to be available to applications written in other languages, it"s safest to specify stdcall in the declarations of exported functions. Other languages may not support Delphi"s default register calling convention.

Иначе потом метить все библиотеки с типом вызова pascal.


 
begin...end ©   (2005-07-23 12:36) [7]

> isasa ©   (23.07.05 12:32) [6]
> Руководствовался простой мыслью...

Я тоже руководствовался простой мыслью. В коде [0] DLL используется в Delphi. И ничего не сказано о том, будет ли DLL использоваться в других языках. Поэтому я и написал вполне очевидную вещь: "здесь не видно преимуществ использования stdcall".


 
isasa ©   (2005-07-23 12:46) [8]

Спор риторический. Поставил слово, и лишил себя проблем на будующее.
На чем писал, что ставил ....



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

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

Наверх




Память: 0.48 MB
Время: 0.053 c
1-1122280286
Sheverev
2005-07-25 12:31
2005.08.14
Создание кнопки ОБЗОР...


1-1122463335
Dust
2005-07-27 15:22
2005.08.14
Глобальные системные флаги


4-1119479507
dan
2005-06-23 02:31
2005.08.14
2 секунды


1-1122109197
Андрей Молчанов
2005-07-23 12:59
2005.08.14
Редактирование поля ListView vsReport


14-1121506530
Игорь Шевченко
2005-07-16 13:35
2005.08.14
Мы не продаем Родину...