![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PWideChar
balepa © (2007-08-14 14:15:00)Чё то не могу сообразить как заполнить такой массив в цикле:
ii: array [1..127] of PWIDECHAR;
Надо:
for i:= 1 to 127 do ii[i]:= 'T00'+IntToStr(i);
balepa (2007-08-15 09:21:00) [1]Премного лагодарен Lacmus
balepa (2007-08-15 07:44:00) [2]
> Lacmus © (14.08.07 18:58) [11]
> Ошибся
>
> ItemDef[i].szItemID:= 'Т00'+IntToStr(i+1);
>
> даже не компилируется
Так никто и неговорил что будет ;)
Lacmus (2007-08-14 18:58:00) [3]Ошибся
ItemDef[i].szItemID:= 'Т00'+IntToStr(i+1);
даже не компилируется
Lacmus (2007-08-14 18:47:00) [4]
function WStrLen(const Str: PWideChar): Cardinal;
var
P : PWideChar;
begin
P := Str;
while (P^ <> #0) do Inc(P);
Result := (P - Str);
end;
function WStrAlloc(Size: Cardinal): PWideChar;
begin
Size := Size * Sizeof(WideChar);
Inc(Size, SizeOf(Cardinal));
GetMem(Result, Size);
Cardinal(Pointer(Result)^) := Size;
Inc(PChar(Result), SizeOf(Cardinal));
end;
function WStrMove(Dest: PWideChar; const Source: PWideChar; Count: Cardinal): PWideChar;
begin
Result := Dest;
Move(Source^, Dest^, Count * Sizeof(WideChar));
end;
function WStrNew(const Str: PWideChar): PWideChar;
var
Size: Cardinal;
begin
if Str = nil then Result := nil else
begin
Size := WStrLen(Str) + 1;
Result := WStrMove(WStrAlloc(Size), Str, Size);
end;
end;
procedure WStrDispose(Str: PWideChar);
begin
if Str <> nil then
begin
Dec(PChar(Str), SizeOf(Cardinal));
FreeMem(Str, Cardinal(Pointer(Str)^));
end;
end;
>она выделяется сама, или нет...
Выделяется, но не для всех 126 элементов
balepa (2007-08-14 18:36:00) [5]Что-то не найду WideStrUtils.pas
И в принципе выделить память под них можно и без WStrNew(если они для этого),
а при s:= 'T00'; (s:PWideChar) она выделяется сама, или нет...
balepa (2007-08-14 18:28:00) [6]
> Lacmus © (14.08.07 18:25) [7]
>
>
> { WideStrUtils.pas }
>
> function WStrNew(const Str: PWideChar): PWideChar;
> procedure WStrDispose(Str: PWideChar);
Попробую...
Lacmus (2007-08-14 18:25:00) [7]
{ WideStrUtils.pas }
function WStrNew(const Str: PWideChar): PWideChar;
procedure WStrDispose(Str: PWideChar);
balepa (2007-08-14 17:53:00) [8]OPCITEMDEFARRAY = array[0..65535] of OPCITEMDEF;
> Плохиш © (14.08.07 15:13) [4]
> Вообще-то в приведённом коде описан указатель на массив
> записей, а не массив указателей.
А в этой записи есть szItemID: POleStr; ( специально же выделил) вот с заполнением его и возникли проблемы.
В итоге должно получиться следующее;
for i:= 0 to 126 do begin
case i of
0..8: ItemDef[i].szItemID:= 'Т00'+IntToStr(i+1);
9..98: ItemDef[i].szItemID:= 'Т0'+IntToStr(i+1);
99..126: ItemDef[i].szItemID:= 'Т'+IntToStr(i+1);
end;
<Здесь заполняем остальные поля ItemDef>
end;
Сергей М. (2007-08-14 15:23:00) [9]
> balepa © (14.08.07 14:58) [3]
> OPC требует этого
> POPCITEMDEFARRAY
Приведи дословно оную декларацию..
Или см. Плохиш © (14.08.07 15:13) [4]
Плохиш (2007-08-14 15:13:00) [10]Вообще-то в приведённом коде описан указатель на массив записей, а не массив указателей.
balepa (2007-08-14 14:58:00) [11]
> AZIZE © (14.08.07 14:18) [1]
>
> > for i:= 1 to 127 do ii[i]:= 'T00'+IntToStr(i);
>
> за такое голову надо отрвать (я имею ввиду имена переменных)
Это пример реальные другие.
> Сергей М. © (14.08.07 14:19) [2]
OPCITEMDEF = record
szAccessPath: POleStr;
szItemID: POleStr;
bActive: BOOL;
hClient: OPCHANDLE;
dwBlobSize: DWORD;
pBlob: PByteArray;
vtRequestedDataType: TVarType;
wReserved: Word;
end;
POPCITEMDEF = ^OPCITEMDEF;
OPCITEMDEFARRAY = array[0..65535] of OPCITEMDEF;
POPCITEMDEFARRAY = ^OPCITEMDEFARRAY;
function AddItems(
dwCount: DWORD;
pItemArray: POPCITEMDEFARRAY;
out ppAddResults: POPCITEMRESULTARRAY;
out ppErrors: PResultList): HResult; stdcall;
OPC требует этого.
Сергей М. (2007-08-14 14:19:00) [12]За каким лешим тебе массив указателей?
AZIZE (2007-08-14 14:18:00) [13]
> for i:= 1 to 127 do ii[i]:= 'T00'+IntToStr(i);
за такое голову надо отрвать (я имею ввиду имена переменных)