Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dll [D6, WinXP]


[Genius] ©   (2002-02-03 08:15:00) 

У меня такая проблемка - нужно через функцию из длл заполнить два одномерных массива... не знаю как писать длл и как ее функцию вызвать, т.к. ни разу с этим не сталкивался... не подскажите?


[Genius]   (2002-02-06 17:27:00) [1]

... при этом в самом delphi окошко вылазиет - invalid pointer operation.??? а это какие операции?


MBo   (2002-02-06 16:48:00) [2]

код?


[Genius]   (2002-02-06 16:46:00) [3]

runtime error 217 at 0040280C


Fellomena   (2002-02-06 15:23:00) [4]

Всем привет !
Тодже немного не поняла в чём вопрос, но тем неменее пример передачи из главного приложения в dll массива и работы с ним:

library MyDll;

uses
SysUtils,
Classes,
Dialogs;

procedure Show(MyArray: array of integer); stdcall;
begin
ShowMessage(IntToStr(MyArray[0])+ #10#13 + IntToStr(MyArray[3]));
end;

exports
Show;

begin
end.

unit Unit1;

interface

uses
Windows, SysUtils, Forms, Classes, Controls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
HDll: THandle;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
PShow: procedure(MyArray: array of integer); stdcall;
MyAr1: array [0..3] of integer;
begin
HDll:=LoadLibrary(PChar("MyDll.dll"));
@PShow:=GetProcAddress(Hdll, "Show");
MyAr1[0]:=1;
MyAr1[1]:=2;
MyAr1[2]:=3;
MyAr1[3]:=666;
PShow(MyAr1);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(HDll);
end;

end.




Belov   (2002-02-06 15:17:00) [5]

Первым модулем с секции uses DLL и главного приложения надо бы прописать ShareMem
Почитай то что заремировано, когда создаешь проект аки Dll


MBo   (2002-02-06 15:05:00) [6]

с номером не напутал?
217 Control-C EControlC
EControlC is raised when a user presses Ctrl+C to terminate a
console application.


[Genius]   (2002-02-06 15:01:00) [7]

спасибо, примерно это мне и надо было, только теперь, если программа обращается к длл, то по завершении программы вылазиет окошко - runtime error 217кажется... что это такое?


MBo   (2002-02-04 13:33:00) [8]

либо N2.
описание создания DLL есть в хелпе, статье Кариха на этом сайте,
в 9 главе Тексейры.

простой пример(стат. компоновка)

library lib1;
procedure makearr(var a,b:array of double;count:integer);stdcall;
var i:integer;
begin
for i:=0 to count-1 do begin
a[i]:=sin(0.1*i);
b[i]:=cos(0.1*i);
end;
end;
exports makearr;
begin
end.


вызов
procedure makearr(var a,b:array of double;count:integer);stdcall;external "lib1";

procedure TForm1.Button1Click(Sender: TObject);
var a,b:array[1..100] of double;
i:integer;
begin
makearr(a,b,100);
for i:=1 to 100 do
memo1.lines.add(floattostr(a[i]))


Алексей Петров   (2002-02-04 13:28:00) [9]

Второе. О чем спросить-то хотел?


[Genius]   (2002-02-04 13:11:00) [10]

Либо никто не знает... либо вопрос задан по-ламерски...


Наверх

Титульная страница Поиск, карта сайта Написать письмо