delphi – 什么数据类型适合在ActiveX方法中处理二进制数据?
发布时间:2020-12-15 04:13:16 所属栏目:大数据 来源:网络整理
导读:我正在为我的朋友编写一个ActiveX控件,它应该封装加密例程.它将主要用于VB6.我应该为二进制数据选择哪种数据类型,如加密密钥,初始化向量,输入和输出数据,这样我的朋友可以方便地从VB6使用它? 我正在使用Delphi 7来编写这个ActiveX,如果这很重要的话.一种选
我正在为我的朋友编写一个ActiveX控件,它应该封装加密例程.它将主要用于VB6.我应该为二进制数据选择哪种数据类型,如加密密钥,初始化向量,输入和输出数据,这样我的朋友可以方便地从VB6使用它?
我正在使用Delphi 7来编写这个ActiveX,如果这很重要的话.一种选择是使用十六进制字符串.另一个可以是什么? 解决方法
VB6二进制数据存储在Byte变量和数组中.
Dim arrData() As Byte VB6应用程序应该将该变量作为OleVariant传递给Delphi COM. procedure VariantToStream(const v :OleVariant; Stream: TStream); var p : pointer; lo,hi,size: Integer; begin lo := VarArrayLowBound(v,1); hi := VarArrayHighBound (v,1); if (lo >= 0) and (hi >= 0) then begin size := hi - lo + 1; p := VarArrayLock (v); try Stream.WriteBuffer (p^,size); finally VarArrayUnlock (v); end; end; end; procedure StreamToVariant(Stream: TStream; var v: OleVariant); var p : pointer; size: Integer; begin size := Stream.Size - Stream.Position; v := VarArrayCreate ([0,size - 1],varByte); if size > 0 then begin p := VarArrayLock (v); try Stream.ReadBuffer (p^,size); finally VarArrayUnlock (v); end; end; end; CoClass单位的用法: // HRESULT _stdcall BinaryTest([in] VARIANT BinIn,[out,retval] VARIANT * BinOut ); function TMyComClass.BinaryTest(BinIn: OleVariant): OleVariant; safecall; var Stream: TMemoryStream; begin Stream := TMemoryStream.Create; try VariantToStream(BinIn,Stream); Stream.Position := 0; // do something with Stream ... // ... and return some Binary data to caller (* BinOut) Stream.Position := 0; StreamToVariant(Stream,Result); finally Stream.Free; end; end; 这是通过COM自动化将字节的SAFEARRAY与二进制数据一起使用的最常用方法.将数据填充到BSTR(十六进制字符串,Base64编码等…)听起来有点难看,看起来更像是一个黑客. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |