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

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

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);

за такое голову надо отрвать (я имею ввиду имена переменных)


Наверх

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