如何将自定义类型强制转换为 array of char(50分)

  • 主题发起人 主题发起人 kaida
  • 开始时间 开始时间
K

kaida

Unregistered / Unconfirmed
GUEST, unregistred user!
自定义类型:
MyRec = packed record
Id: integer;
State: Byte

Name: String[255]

end;

有一过程:
procedure SendBuffer(Buff: array of char
length: integer);


rec: MyRec;
...

SendBuffer(rec, sizeof(MyRec));

提示错误:
Incompatible types: 'Array' and 'MyRec'

请教如何将 rec 强制转换为 array of char ?
 
很简单
type
PCharAry = ^array of char;
var
rec: MyRec;
begin
...
SendBuffer(PCharAry(@MyRec)^, SizeOf(MyRec));
...
end;
 
谢谢 SupermanTm, 但是编译通不过,在下行提示:E2029 Identifier excepted but 'ARRAY' found
PCharAry = ^array of char;
 
你的 procedure SendBuffer(Buff: array of char
length: integer)

能修改么 ?使用:
type
TCharAry = array of char;
函数声明改为:
procedure SendBuffer(Buff: TCharAry
length: integer);
然后 SupermanTm 的代码就可以用了:
type
PCharAry = ^TCharAry;
var
rec: MyRec;
begin
...
SendBuffer(PCharAry(@MyRec)^, SizeOf(MyRec));
...
end;
 
谢谢 LSUPER。我的 SendBuffer 是控件里提供的,无法更改。
我记得有强制转换的办法,具体想不起来了。这在 C 里是很容易的事。在 delphi 里应该怎么写?大家帮忙想想。
 
那就直接:
SendBuffer(PChar(@Rec)^, SizeOf(Rec));
不过原来的定义不大好,Buff: array of char 本身已经可以 Length(Byffer) 了还搞一个 length: integer 多此一举啊
or 如果这是一个 dll 导入函数什么的定义(如 c 的 h 文件)转化到 pas,你可以改写成:
procedure SendBuffer(const Buff
length: Integer)

然后用起来就爽了:
SendBuffer(Rec, SizeOf(Rec));
注意:这时候 SendBuffer 的实现代码不需要任何改动。
 
或者如果它的定义就是不能动,建议你自己对他进行封套:

procedure MySendBuffer(const ABuffer
ALength: Integer);
begin
SendBuffer(PChar(@ABuffer)^, ALength);
end;

然后使用 MySendBuffer(int, SizeOf(integer))、MySendBuffer(dou, SizeOf(double))
注意,对于 s:string 必须使用 MySendBuffer(PChar(s)^, Length(s))
:-)
 
谢谢。答案接受了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
724
import
I
后退
顶部