Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.09;
Скачать: CL | DM;

Вниз

PWideChar   Найти похожие ветки 

 
balepa ©   (2007-08-14 14:15) [0]

Чё то не могу сообразить как заполнить такой массив в цикле:
ii: array [1..127] of PWIDECHAR;

Надо:
for i:= 1 to 127 do ii[i]:= "T00"+IntToStr(i);


 
AZIZE ©   (2007-08-14 14:18) [1]


> for i:= 1 to 127 do ii[i]:= "T00"+IntToStr(i);

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


 
Сергей М. ©   (2007-08-14 14:19) [2]

За каким лешим тебе массив указателей ?


 
balepa ©   (2007-08-14 14:58) [3]


> 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 15:13) [4]

Вообще-то в приведённом коде описан указатель на массив записей, а не массив указателей.


 
Сергей М. ©   (2007-08-14 15:23) [5]


> balepa ©   (14.08.07 14:58) [3]
> OPC требует этого


> POPCITEMDEFARRAY


Приведи дословно оную декларацию..

Или см. Плохиш ©   (14.08.07 15:13) [4]


 
balepa ©   (2007-08-14 17:53) [6]

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;


 
Lacmus ©   (2007-08-14 18:25) [7]



{ WideStrUtils.pas }

function WStrNew(const Str: PWideChar): PWideChar;
procedure WStrDispose(Str: PWideChar);



 
balepa ©   (2007-08-14 18:28) [8]


> Lacmus ©   (14.08.07 18:25) [7]
>
>
> { WideStrUtils.pas }
>
> function WStrNew(const Str: PWideChar): PWideChar;
> procedure WStrDispose(Str: PWideChar);


Попробую...


 
balepa ©   (2007-08-14 18:36) [9]

Что-то не найду WideStrUtils.pas
И в принципе выделить память под них можно и без WStrNew(если они для этого),
а при s:= "T00"; (s:PWideChar) она выделяется сама, или нет...


 
Lacmus ©   (2007-08-14 18:47) [10]



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 элементов


 
Lacmus ©   (2007-08-14 18:58) [11]

Ошибся


 ItemDef[i].szItemID:= "Т00"+IntToStr(i+1);



даже не компилируется


 
balepa ©   (2007-08-15 07:44) [12]


> Lacmus ©   (14.08.07 18:58) [11]
> Ошибся
>
>  ItemDef[i].szItemID:= "Т00"+IntToStr(i+1);
>
> даже не компилируется


Так никто и неговорил что будет ;)


 
balepa ©   (2007-08-15 09:21) [13]

Премного лагодарен Lacmus



Страницы: 1 вся ветка

Текущий архив: 2007.09.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
15-1186604629
Суслик
2007-08-09 00:23
2007.09.09
Покупка непереведенных книг


8-1165244587
Quicker
2006-12-04 18:03
2007.09.09
Проиграть MID, WAV


2-1187338212
Poroshm
2007-08-17 12:10
2007.09.09
Работа с окнами


15-1187106129
iZEN
2007-08-14 19:42
2007.09.09
Mdf2iso, есть ли аналоги iat.exe?


2-1187086523
balepa
2007-08-14 14:15
2007.09.09
PWideChar