Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.04 c
2-1187334864
Adios
2007-08-17 11:14
2007.09.09
ValueListEditor


2-1186460092
bagos
2007-08-07 08:14
2007.09.09
teechart


15-1186712374
dimaL
2007-08-10 06:19
2007.09.09
Отличие версий C++ builder 6


2-1187100069
neodream
2007-08-14 18:01
2007.09.09
Автозаполнение в TEdit


15-1187091840
Манол
2007-08-14 15:44
2007.09.09
Нужен совет профессионала





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский