把控件图形变成二进制流输出
[id(115), helpstring("method WriteBinStream")]
VARIANT_BOOL WriteBinStream(VARIANT* pVarBinArray, BSTR sPassword, LONG iVersion);|
参数 |
说明 |
|
VARIANT* pVarBinArray |
输出二进制数组.是个byte数组 |
|
BSTR sPassword |
数据密码,没有密码,传空字符串 |
|
LONG iVersion |
输出的文件版本,如果保存CAD 2002图纸,可以传 23 |
成功返回True
例如:VB调用例程
Dim aryData As Variant
MxDrawX1.WriteBinStream aryData, "", 23
Dim ln As Long
ln = UBound(aryData)
ReDim sbyte(0 To ln) As Byte
Dim str$
For i = 0 To ln
sbyte(i) = aryData(i)
'str = str & " " & (aryData(i))
Next
'MsgBox str
'MxDrawX1.ReadBinStream aryData, "", 16777215
MxDrawX1.ReadBinStream sbyte, "", 16777215例如:Delphi代码
function OleToMStream(OV:OleVariant): TMemoryStream;
var
Data: PByteArray;
Size: integer;
beginResult:=TMemoryStream.Create;
try
Size:=VarArrayHighBound(OV,1)-VarArrayLowBound(OV,1)+1;
Data:=VarArrayLock(OV);
try
Result.Position:=0;
Result.WriteBuffer(Data^,Size);
finally
VarArrayUnlock(OV);
end;
except
Result.Free;Result:=nil;
end;
end;
function MStreamToOle(Strm:TMemoryStream): OleVariant;
var
Data: PByteArray;
beginResult:= VarArrayCreate([0, Strm.Size - 1], varByte);
Data:= VarArrayLock(Result);
try
Strm.Position := 0;
Strm.ReadBuffer(Data^, Strm.Size);
finally
VarArrayUnlock(Result);
end;
end;
procedure TForm2.Button6Click(Sender: TObject);
var
aryData:OleVariant;
memStream : TMemoryStream ;
aryReadData: OleVariant;
begin
// 写到内存流
MxDrawX1.WriteBinStream(aryData,'',23);
memStream := OleToMStream(aryData);
// 从内存流加载
aryReadData := MStreamToOle( memStream);
MxDrawX1.ReadBinStream(aryData,'',23);
end;
例如: VC+COM
_variant_t data;
m_ocx.WriteBinStream(&data,_T(""),23);
m_ocx.ReadBinStream(data,_T(""),16777215);