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