![]() |
Указатель на массив указателей в Delphi
Значит проблема в следующем. Пишу на Delphi. В функцию передаются указатель на массив указателей и размер массива. Вопрос вот в чем. А как использовать этот указатель на массив указателей. Нужно изменять значения переменных на которые указывают указатели в массиве. Непонятно, как работать с таким массивом.
Пробовал: Poi: pointer; @Massiv:=Poi; не катит. Помогите, пожалуйста. |
Вам стоит почитать теорию ;) Особенно про использование указателей в Object Pascal.
Ну а пока вот решение проблемы, если надо что-то более конкретное, спрашивайте... Код:
program Project; |
Теорией я владею. Просто раньше никогда с таким не сталкивался (Visual C не в счет).
В моем случае проблема состоит в том, что нужно реализовать данную функцию в DLL. То есть создается динамический массив. Вот мой (приблизительный) код: function DLLExecute(I:pointer;ISize:smallint):boolean; var L:smallint; IntMas:array of integer; begin setlength(intmas,isize); for L:=1 to Isize do begin IntMas[L]:=integer(I^[L]^); end; DLLExec:=true; end; При реализации такого кода Delphi указывает на строку IntMas[L]:=integer(I^[L]^) и говорит, что Array type Required. Так я понял, что в вашем примере, процедура "знает", какого что переменная p - типа ppp, а в моем - нет. А вот кусок главной программы (находится вообще в другой папке): var DLLExecute:function(I:pointer;ISize:smallint):boolean; begin DLLExecute(@IntMas,47); end; |
Server
Цитата:
|
Указал я тип переменной. Вынес описание массива выше в type. Но эффекта никакого не последовало.
|
Я себе представляю это так: разыменовали указатель на массив указателей, получили массив указателей; разыменовали элемент массива - получили значение хранящееся в этой ячейке памяти. Вот мой полный код, DLL (плагины):
library FirstPlugin; uses Forms, StdCtrls, Graphics, Controls, Classes, ExtCtrls; {$R *.res} function PluginExec(I,R,S,B:array of pointer;ISize,RSize,SSize,BSize:smallint):boolean; begin PluginExec:=true; end; exports PluginExec; end. Функция, которая вызывается в главной программе я уже описал выше. Помогите пожалуйста... |
А вот когда написал такой код, то компилятор говорит, мол не закрыл запись:
'(' expected but ',' found - Строка k:smallint; ';' expected but 'FOR' found - Строка begin '.' expected but ';' found - Строка IntMas[k]:=I^[k]; library FirstPlugin; uses Forms, StdCtrls, Graphics, Controls, Classes, ExtCtrls; {$R *.res} type IntMas = array of pointer; PIntMas = ^IntMas; function PluginExec(I,R,S,B:PIntMas;ISize,RSize,SSize,BSize:smallint):boolean; var Form1: TForm; k:smallint; begin Application.CreateForm(TForm, Form1); setlength(IntMas,Isize); for k:=0 to ISize do IntMas[k]:=I^[k]; Form1.ShowModal; PluginExec:=true; end; exports PluginExec; end. Подскажите, что не так. |
в паскале `;` при описании фукции ставится, или я что-то подзабыл?
Код:
function func(a:integer) : integer; |
Время: 05:45. |
Время: 05:45.
© OSzone.net 2001-