Vla*_*sny 5 delphi activex binary-data
我正在为我的朋友编写一个ActiveX控件,它应该封装加密例程.它将主要用于VB6.我应该为二进制数据选择哪种数据类型,如加密密钥,初始化向量,输入和输出数据,这样我的朋友可以方便地从VB6使用它?
我正在使用Delphi 7来编写这个ActiveX,如果这很重要的话.一种选择是使用十六进制字符串.另一个可以是什么?
VB6 二进制数据存储在字节变量和数组中。
Dim arrData() As Byte
Run Code Online (Sandbox Code Playgroud)
VB6 应用程序应该将该变量作为OleVariant. Delphi COM 可以相互VarArray转换:TStream
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;
Run Code Online (Sandbox Code Playgroud)
单位用途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;
Run Code Online (Sandbox Code Playgroud)
这是通过 COM 自动化将字节与二进制数据一起使用的最常见方法SAFEARRAY。
将数据填充到BSTR(十六进制字符串、Base64 编码等)中对我来说听起来有点难看,而且看起来更像是一种 hack。
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |