OleVariant 类型的数据我如何才能吧它取出来?(10分)

  • 主题发起人 主题发起人 ucan1
  • 开始时间 开始时间
U

ucan1

Unregistered / Unconfirmed
GUEST, unregistred user!
OleVariant 类型的数据我如何才能吧它取出来?
 
faint.没人回答得出来呀?
 
分真少 我... ... 算了 告诉你吧
目前国际流行的通用DLL/OCX数据接口是这样的:
定义为 OleVariant 不管什么语言都可以了,例如DELPHI是这样用的
var
PhotoData:TMemoryData;
Begin
PhotoData:=TMemoryData.Create;
try
Image_data:=VarArrayCreate([0,indexsize-1],VarByte);
DLL的某函数(Image_data);
Pbuf:=VarArrayLock(Image_data);
PhotoData.SetData(pbuf,VarArrayHighBound(Image_data,1)+1);
PhotoData.Save_to_file('c:/temp.dbf');
finally
VarArrayUnlock(Image_data);
PhotoData.DataSize :=0;
end;
end ;
 
[8)][8)][8)]

原来各位大虾是嫌分少呀
偶穷死了嘛

否则肯定不会这样拉


 
TO:mstar
TMemoryData是那里定义的数据类型?
 
有个例子就好了
 
是呀是呀
希望大虾提供一个可以编译通过,调试成功的例子
 
自己写的一个类 直接用 内存流 也可以的
TMemoryData=Class(TStream)
private
Fdata:Pointer;
FdataSize:integer;
public
destructor Destroy;override;
function Empty:Boolean;
procedure Load_From_file(const FileName:string);
procedure Load_From_Stream(S:TStream);
procedure Save_to_Stream(S:TStream);
procedure Save_to_file(const fileName:string);
procedure SetData(data:Pointer;size:integer);
property DataSize:integer read FdataSize write FDataSize;
end;
implementation

destructor TMemoryData.Destroy;
begin
if Not Empty then
freemem(Fdata,FdataSize);
inherited Destroy;
end;
function TMemoryData.Empty:Boolean;
begin
Result:=FDatasize=0;
end;
procedure TMemoryData.Load_From_file(const FileName:string);
var
F:TFileStream;
begin
try
F:=TFileStream.create(FileName,fmOpenRead);
Load_From_Stream(F);
finally
F.free;
end;
end;
procedure TMemoryData.Load_From_Stream(S:TStream);
begin
if Not Empty then
freeMem(Fdata,FdataSize);
FdataSize:=S.size;
Fdata:=AllocMem(FdataSize);
s.read(Fdata^,fdatasize);
// showmessage(string(fdata^));
end;
procedure TMemoryData.Save_to_Stream(S:TStream);
begin
if NOt Empty then
S.Write(FData^,Fdatasize);
end;
procedure TMemoryData.Save_to_file(const fileName:string);
var
F:TFileStream;
begin
F:=TFileStream.Create(fileName,fmCreate);
try
Save_to_Stream(F);
finally
F.Free;
end;
end;
procedure TMemoryData.SetData(data:Pointer;size:integer);
begin
if NOt Empty then
freeMem(fdata,Fdatasize);
FdataSize:=size;
// FData:=AllocMem(fdatasize);
Fdata:=data;
end;
 
简单的字符串就用vartostr()
 

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);

这里的Headers应该在WebBrowser1.Navigate(url)之前就有值了呀,但是。。。

===========================================
测试结果

VarIsArray(Headers) = false
VarIsEmpty(Headers) = false
VarIsNull(Headers) = false

i:=SizeOf(Headers); // i= 16 bytes

i:=length(Headers); // i=0 ???????????为什么此时为0

而且无论如何我都取不出来这个Headers?

====================================================

 
现在我想确认一下Headers在BeforeNavigate2事件中到底有没有值呀?

如果有的话怎么会取不到呢?
 
后退
顶部