var
ABuf: array of Byte;
APacketBuf1: array of Byte;
begin
SetLength(ABuf, 3);
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12; APacketBuf1 := Copy(ABuf); ***
end; 这样提示***Incompatible typesvar
ABuf, APacketBuf1: array of Byte;
begin
SetLength(ABuf, 3);
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12; APacketBuf1 := Copy(ABuf);
end; 这样就正常。 我靠我的本意是这样的;
procedure TForm1.GetPacketBuffer(var APacketBuf: array of Byte);
var
ABuf: array of Byte;
begin
SetLength(ABuf, 3);
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12; APacketBuf := Copy(ABuf);
end;给拷贝一份数据到APacketBuf这个动态数组里,可是提示说Incompatible types:'Array' and 'dynamic array';
大伙帮满看啊
ABuf: array of Byte;
APacketBuf1: array of Byte;
begin
SetLength(ABuf, 3);
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12; APacketBuf1 := Copy(ABuf); ***
end; 这样提示***Incompatible typesvar
ABuf, APacketBuf1: array of Byte;
begin
SetLength(ABuf, 3);
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12; APacketBuf1 := Copy(ABuf);
end; 这样就正常。 我靠我的本意是这样的;
procedure TForm1.GetPacketBuffer(var APacketBuf: array of Byte);
var
ABuf: array of Byte;
begin
SetLength(ABuf, 3);
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12; APacketBuf := Copy(ABuf);
end;给拷贝一份数据到APacketBuf这个动态数组里,可是提示说Incompatible types:'Array' and 'dynamic array';
大伙帮满看啊
解决方案 »
- delphi2010如何安装自定义控件
- SQL Server 2000 SQL语句跟踪的问题
- installshield express for delphi5打包提示 没有注册类别
- 大家新年好!请教用DELPHI开发C/S系统,权限模块怎样架构?
- 内存泄漏如何检查?
- 传SQL语句出错?大家进来帮帮忙?
- 谁用过bsSkinComboBox这个控件?????????????????
- 谁知道哪家公司做手机游戏的?贴出公司主页地址,越多越好,帮帮忙吧!
- 谁有delphi编游戏的资料或网址?
- 有人写马??价格不是问题,只要达到要求
- Delphi中[Warning] Unit 'SkinCaption' implicitly imported into package 'WinSkinD7D',怎么解决啊?
- Delphi兄弟们,接分
var
ABuf[3]: array of Byte;
begin
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12; APacketBuf := Copy(ABuf);
end;
这样就可以的。
(1)Pascal是强类型语言,什么叫强类型语言,简单的举个例子,你这么声明
A:array[0..3] of integer;
B:array[0..3] of integer;
A和B就不是赋值兼容的,A:=B无法通过编译。但是你这么声明
A,B:array[0..3] of integer;
A和B就是赋值兼容的。
还可以这么玩
type
MyArray = array[0..3] of integer;var
A:MyArray;
B:MyArray;
A和B就是赋值兼容的
(2)第二个比较罗嗦一点,数组作为Delphi函数的参数的问题,APacketBuf不是一个动态数组,Delphi中叫开放数组参数,实际上它是一个普通数组,而你的ABuf变量是真正的动态数组,当然赋值不兼容。可能这个不是简单说得清的。请参考《Object Pascal参考手册》和《Delphi 技术手册》
TMyArray = array[0..3] of integer; function myfun(a:TMyArray):TMyArray;
var a:TMyArray;
begin
result:= a;
end;//-----------------var a,b:TMyArray;
b:=myfun(a);
可以这样写program Project2;{$APPTYPE CONSOLE}uses
SysUtils;procedure GetPacketBuffer2(var APacketBuf: Pointer; out len: Integer);
var
ABuf: array of Byte;
begin
SetLength(ABuf, 3);
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12;
len:=length(ABuf); APacketBuf := Copy(ABuf);
end;var
ab: array of byte;
len: Integer;begin
try
GetPacketBuffer2(Pointer(ab),len);
{ TODO -oUser -cConsole Main : Insert code here }
writeln(ab[0]);
writeln(ab[1]);
writeln(ab[2]);
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
或者不需要返回长度,用high照样可以取到
procedure GetPacketBuffer2(var APacketBuf: Pointer);
var
ABuf: array of Byte;
begin
SetLength(ABuf, 3);
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12; APacketBuf := Copy(ABuf);
end;GetPacketBuffer2(Pointer(ab));
TAarryByte = array of Byte;procedure TForm1.GetPacketBuffer(var APacketBuf: TAarryByte );
begin
SetLength(APacketBuf, 3);
APacketBuf[0] := 10;
APacketBuf[1] := 11;
APacketBuf[2] := 12;
end;
/----------------------在某个地方就可以像一般变量那样使用了var
a: TArrayByte;
TForm1.GetPacketBuffer(a);
procedure GetPacketBuffer(var APacketBuf: array of Byte);
var
ABuf: array of Byte;
begin
SetLength(ABuf, 3);
ABuf[0] := 10;
ABuf[1] := 11;
ABuf[2] := 12; Move(ABuf[Low(Abuf)], APacketBuf[Low(ABuf)], Length(ABuf));
end;var
ABuf: array of Byte;
begin
SetLength(ABuf, 3);
GetPacketBuffer(ABuf);