Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.146.105.137] |
|
Сообщ.
#1
,
|
|
|
Вот код:
unit Unit31; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TfMain = class(TForm) procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; TETPBuf = array[0..9] of Byte; TETPReadBuf = array[Byte] of Byte; var fMain: TfMain; RealRD : TETPReadBuf; implementation {$R *.dfm} function Test(RD : TETPBuf): Boolean; begin Result:=RD[0] = 0; end; procedure TfMain.FormShow(Sender: TObject); begin Test(TETPBuf(RealRD)); end; end. Не понимаю с какого перепуга в строке Test(TETPBuf(RealRD)); Или я чего-то пропустил в букваре Дельфи? Прикреплённый файлTestTCArr.rar (3,35 Кбайт, скачиваний: 58) |
Сообщ.
#2
,
|
|
|
Размер не совпадает, такое приведение только через указатели.
This error message is issued for type casts not allowed by the rules. The following kinds of casts are allowed: ... A variable reference to any type of the same size. (на самом деле Float->Ordinal запрещено) Разрешено приведение таких, например, типов: TETPReadBuf = array[1..10] of Byte; TETPReadBuf = array[0..4] of Word; Аналогичный случАй - заработает, если раскомментировать поле y, причем в обе стороны Int-Rec и Rec-Int type TRec = packed record x: Byte; //y: Byte; Z: WideChar; end; var F: TRec; function A(R : Integer): Boolean; begin Result := R = 0; end; begin A(Integer(F)); |
Сообщ.
#3
,
|
|
|
Цитата northener @ Или я чего-то пропустил в букваре Дельфи? Прямое приведение типа TETPBuf(Х) возможно только в случае, когда SizeOf(X) = SizeOf(TETPBuf). В противном случае нужно использовать (явное или неявное) приведение типа через указатели. Например: type pTETPBuf = ^TETPBuf; ... //вариант 1 function Test(const RD : TETPBuf): Boolean; Test(pTETPBuf(@RealRD)^); //вариант 2 function Test(RD : pTETPBuf): Boolean; Test(@RealRD); //вариант 3 - самый простой и безопасный с неявным приведением типа и передачей кол-ва элементов массива function Test(RD : array of byte): Boolean; Test(RealRD); |