如何通过com发送文件? ( 积分: 200 )

  • 主题发起人 主题发起人 dyfh
  • 开始时间 开始时间
D

dyfh

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个程序,原来是通过socket给请求端发送文件,现在程序要改成com的,是不是不能再使用了socket了?
如果不用socket,com自身如何发送文件呀,我查看了手上的书都没有相关的介绍,高手给些经验或建议呀
 
我有一个程序,原来是通过socket给请求端发送文件,现在程序要改成com的,是不是不能再使用了socket了?
如果不用socket,com自身如何发送文件呀,我查看了手上的书都没有相关的介绍,高手给些经验或建议呀
 
可以啊!你把文件内容分割成好几份,然后写到OleVariant类型的变量中,发送过去,再重组.
 
好像不行吧
 
to dedema
OleVariant的话,文件如何分割,如何重组?有没有例子呢?
to goddy
你是说什么不行?
 
to dedema
我说的不是com串囗,是com/dcom
 
不用分割,直接包装成variant传递,看看下边两个函数
function filetovar(filename:string):variant;
var
stream:tfilestream;
p:pointer;
begin
Stream:=Tfilestream.Create(filename,fmOpenRead);
Stream.Position:=0;
result:= VarArrayCreate([0, Stream.Size - 1], varByte);
p:= VarArrayLock(result);
try
Stream.Position := 0;
Stream.Read(p^, Stream.Size);
finally
VarArrayUnlock(result);
end;
Stream.Free;
end;
procedure vartofile(filevar:variant;filename:string);
var
stream:Tmemorystream;
p:pointer;
begin
Stream:=Tmemorystream.Create;
try
p := VarArrayLock(filevar);
try
Stream.Write(p^, VarArrayHighBound(filevar,1) + 1);
finally
VarArrayUnlock(filevar);
end;
stream.savetofile(filename);
finally
Stream.Free;
end;
end;
 
{----------自定义服务端函数--供群发提交PCM录音文件调用----参数方法------}
procedure TWebTest.QfPcm(FileName, AVariant: OleVariant;
var Ret: OleVariant);
begin
try
VariantToFile(trim(FileName), AVariant);
ret := '1';
except
ret := '0';
end;

end;
 
{----------文件保存调用:过程----------}
procedure VariantToFile(FileName: string;
var AVariant: OleVariant);
var
AStream: TFileStream;
MyBuffer: Pointer;
Size: Integer;
begin
AStream := TFileStream.create(FileName, fmCreate);
try
aStream.Seek(0, soFrombegin
ning);
Size := VarArrayHighBound(AVariant, 1) + VarArrayLowBound(AVariant, 1) + 1;
MyBuffer := VarArrayLock(AVariant);
AStream.WriteBuffer(MyBuffer^, Size);
VarArrayUnlock(AVariant);
finally
AStream.Free;
end;
end;
过程精简吧
 

Similar threads

后退
顶部