![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 05.05.2009
Сообщений: 1
|
![]()
Здравствуйте!! Такая проблема: реализовал в Delphi 7 DLL- библиотеку (динамически) в котором реализуется сортировка одномерного массива, но при сортировке массива постоянно прога выдаёт ошибку:
Project1 "Accsess violation at address 00000000. Read of address 00000000." Никак не могу понять в чём проблем ![]() ![]() Листинг проги: library Projectdll; uses SysUtils, Classes; type mas1 = array[1..8] of integer; mas = array[1..8, 1..8] of integer; var massiv:mas; {$R *.res} Function sort(a:mas1):mas;export;stdcall; var i,j,k,f: integer; x:integer; begin for i:=2 to 8 do begin for j:=8 downto i do if a[j-1] > a[j] then begin x:=a[j-1]; a[j-1]:=a[j]; a[j]:=x; end; for k:=1 to 8 do massiv[i-1][k]:=a[k]; end; result:=massiv; end; exports sort; begin end. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) aGrid1: TStringGrid; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type mas1 = array[1..8] of integer; mas = array[1..7, 1..8] of integer; var Form1:TForm1; Sort:Function(a: mas1): mas; stdcall; LibHandle:THandle; i,z,k,x:integer; a:mas1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin randomize; for i:=1 to 8 do begin a[i]:=random(200); AGrid1.Cells[i,1]:=inttostr(a[i]); end; end; procedure TForm1.Button2Click(Sender: TObject); var massiv:mas; begin massiv:=sort(a); for i:=1 to 7 do for z:=1 to 8 do agrid1.Cells[z,i+1]:=inttostr(massiv[i,z]); end; procedure TForm1.Button3Click(Sender: TObject); begin @Sort:=nil; LibHandle:=loadLibrary('Projectdll. DLL'); if LibHandle >= 32 then begin @Sort:=GetProcAddress(LibHandle,'So rt'); end; button1.Enabled:=true; button2.Enabled:=true; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeLibrary(Handle); end; procedure TForm1.Button4Click(Sender: TObject); begin close; end; end. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? | Mclaren | Помощь студентам | 2 | 27.04.2009 22:37 |
БД в делфи | Neymexa | Помощь студентам | 29 | 29.01.2009 20:32 |
Делфи 7 | Lemo | Софт | 1 | 30.12.2008 14:21 |
Из с++ в Делфи | Andre1723 | Общие вопросы Delphi | 4 | 02.06.2008 17:50 |
Делфи | ozhjog | Свободное общение | 4 | 20.05.2007 21:06 |