Самое простое - писать функции и процедуры DLL с передачей целых чисел или с плавающей точкой. Тестовый проект Delphi демонстрирует требуемые объявления в Delphi и Visual Basic:
program Rg;
uses
Forms,
Rg1 in 'RG1.PAS' {Form1},
Rg2 in 'RG2.PAS';{$R*.RES}
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Модуль, который содержит код DLL показан ниже. Обратите внимание на объявление в разделе interface и использование директивы export после объявления. Директива export делает процедуру или фукнцию экспортной в пределах DLL, вынуждая подпрограмму использовать модель дальнего вызова и генерируя специальный вход в процедуру и код завершения.
unit Rg2;
interface
procedure ChangeInt(x1 : integer; var x2 : integer); export;
{Note export directive}
procedure ChangeSingle(x1 : single; var x2 : single); export;
{Note export directive}
implementation
procedure ChangeInt(x1 : integer; var x2 : integer);
begin
x2 := x1 * 20;
end;
procedure ChangeSingle(x1 : single; var x2 : single);
begin
x2 := x1 * 20.56;
end;
end.
Это код тестовой формы, которая содержит две кнопки:
procedure TForm1.Button1Click (Sender: TObject);
var
x1,x2:integer;
begin
x1:=4;
ChangeInt(x1,x2);
showmessage(inttostr(x2));
end;
procedure TForm1.Button2Click (Sender: TObject);
var
x1,x2:single;
s:string ;
begin
x1:=4.6;
Changesingle(x1,x2);
str(x2:0:3,s);
showmessage(s);
end;
end.
чтобы проверить приложение, скомпилируйте и запустите проект обычным способом. Для создания проекта DLL, используйте rgdll.dpr, показанный выше и скомпилируйте проект. Вы не можете запустить проект DLL.
Теперь давайте создадим проект в VB. Нужно создать форму с двумя кнопками и файлом модуля. В модуле поместите следующие объявление:
Declare Sub changesingle Lib "rgdll.dll" (
ByVal x1 As Single, x2 As Single)
Declare Sub changeint Lib "rgdll.dll" (
ByVal x1 As Integer, x2 As Integer)
Нужно отметить следующее:
- Каталог, в котором расположена DLL должен быть в стандартной папке, обычно Windows/System
- Типы параметров, которые передают DLL, должны соответствовать
- Используйте ByVal для передачи значений
В коде формы поместите следующее:
Sub Command1_Click ()
Dim x1 As Integer
Dim x2 As Integer
x1 = 4
Call changeint(x1, x2)
Print x2
End Sub
Sub Command2_Click ()
Dim x1 As Single
Dim x2 As Single
x1 = 4.6
Call changesingle(x1,x2)
Print x2
End Sub
Если все работает, значит Вы создали свою первую DLL!
|