在COM中,我想返回一个记录类型的指针,应该是什么?我现在用LPSTR(即PCHAR),该用啥?? (50分)

  • 主题发起人 主题发起人 zlj555
  • 开始时间 开始时间
type
TDataType = record
I: Integer;
S: string[255];
end;

server:
function GetData: OleVariant;
var
P: Pointer;
begin
VarClear(Result);//不知D5有没。
try
Result := VarArrayCreate([0, SizeOf(TDataType)], varByte);
P := VarArrayLock(Result);
//Data: TDataType为你要传的记录类型
Move(Data, P^, SizeOf(TDataType));
finally
VarArrayUnLock(Result);
end;
end;

client;
procedure GetFile(const FileName: string);
var
P: Pointer;
V: OleVariant;
Data: TDataType;
begin
FillChar(Data, SizeOf(Data), 0);
V := SocketConnection1.AppServer.GetData;
try
P := VarArrayLock(V);
Move(P^, Data, SizeOf(Data));
finally
VarArrayUnLock(V);
end;
end;

注意一点,在这里传的记录类型中,如果是不能确定内容长度的,请为它分配一定的空间。
如string,请用string[len], array 的为:array [0..len] of 类型
 
to copy_paste谢谢,我的记录类型仅为String,原来这里出了问题,但是不是string[20]变成
定长的后,我的所以前按string的操作都不用改变。即String[20]的操作和string是一样的?
 
谢谢大家,已经解决了,怎么解决的,看谁得的分高就是了。
 
后退
顶部