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

Вниз

Простой вопрос по ДЛЛ   Найти похожие ветки 

 
NightStranger ©   (2005-06-02 18:01) [0]

Hi, all! Пытаюсь постичь ДЛЛ... Скомпилировал ДЛЛку со следующим кодом

library MyLib;

uses
 SysUtils,
 Classes;

{$R *.RES}
function c(a,b:integer):integer;
begin
result:=a+b;
end;
exports
c;
begin
end.

что мне нужно прописать в программе для того, чтобы использовать функцию "с". Спасибо


 
lookin ©   (2005-06-02 18:05) [1]

Как я понимаю, в interface

function с(a,b: integer): integer; stdcall;

А в implementation

function c(a,b: integer); external "MyLib.DLL";


 
lookin ©   (2005-06-02 18:06) [2]

Либо же так, в interface:

function c(a,b: integer): integer; external "C:\MyLib.dll"; register;


 
NightStranger ©   (2005-06-02 18:12) [3]

Сделал так:
...
interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;
type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
function c(a,b: integer): integer; stdcall;
var
 Form1: TForm1;

implementation

{$R *.DFM}
function c(a,b: integer):integer; external "MyLib.DLL";
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(c(10,5)));
end;

end.
Получил 6-8 значный ответ и окошко "CPU"  в придачу...


 
lookin ©   (2005-06-02 18:14) [4]

>>Получил 6-8 значный ответ и окошко "CPU"  в придачу...

Это значит, что я ошибся в первом варианте. А что говорит второй?


 
NightStranger ©   (2005-06-02 18:15) [5]

Не понял...


 
lookin ©   (2005-06-02 18:16) [6]

Второй вариант тоже выдает "6-8 значный ответ и окошко "CPU"  в придачу..."?


 
NightStranger ©   (2005-06-02 18:20) [7]

Если ты про "C:\MyLib.dll", то да. Пробовал с разными числами и разной локацией ДЛЛ - ни фига - все по старому


 
MBo ©   (2005-06-02 18:23) [8]

stdcall убери - в библиотеке же нет этого модификатора


 
lookin ©   (2005-06-02 18:24) [9]

А вот у меня все работает...

Код dll

library MyLib;

uses
 SysUtils,
 Classes;

{$R *.RES}

function c(a,b:integer):integer;
begin
 Result:=a+b;
end;

exports
c;
begin
end.

И код программы

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
 function c(a,b: integer): integer; external "C:\MyLib.dll"; register;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
 showmessage(inttostr(c(1,2)));
end;

end.


 
NightStranger ©   (2005-06-02 18:24) [10]

Убрал. Работет. Спасибо. А что он обозначает (StdCall)


 
begin...end ©   (2005-06-02 18:25) [11]

> NightStranger ©   (02.06.05 18:12) [3]

> Получил 6-8 значный ответ и окошко "CPU"  в придачу...

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

Т.е. в приложении функцию нужно объявить так:

function c(a, b: integer): integer; external "MyLib.DLL";
или так:

function c(a, b: integer): integer; register; external "MyLib.DLL";



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

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

Наверх




Память: 0.47 MB
Время: 0.031 c
1-1118056674
Gear
2005-06-06 15:17
2005.06.29
TreeView открытое.


1-1117889389
Петр
2005-06-04 16:49
2005.06.29
Утечка памяти


1-1118130236
makle
2005-06-07 11:43
2005.06.29
TreeView. Количество вложенных уровней у нода


3-1116316623
Dell3r
2005-05-17 11:57
2005.06.29
Помогите составить запрос


1-1117622833
chili
2005-06-01 14:47
2005.06.29
Подскажите как работать с libpq.dll для 8.0?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский