VC代码为:
CString path="c:\\1.jpg";
CFile myFile;
byte* data;
if(myFile.Open(path, CFile::modeRead | CFile::typeBinary))
{
UINT filelen=myFile.GetLength();
data = new byte[filelen];
_variant_t outData;
UINT dw=myFile.Read(data,filelen);
if (dw==filelen)
{
theApp.buffer->ByteToVariant(data,filelen,&outData);
myFile.Close();
int x0,x1,y1,y0;
BOOL ok1=theApp.face->FindFace(outData,&x0,&x1,&y0,&y1);
}
}
其中 ByteToVariant 函数为:void CImageBuffer::ByteToVariant(byte *bData, long bSize, VARIANT *pOutAarry)
{
SAFEARRAY* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements =bSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i <bSize; i++)
SafeArrayPutElement (psa, &i,bData++);
pOutAarry->vt = VT_ARRAY | VT_UI1;
pOutAarry->parray = psa;}
CString path="c:\\1.jpg";
CFile myFile;
byte* data;
if(myFile.Open(path, CFile::modeRead | CFile::typeBinary))
{
UINT filelen=myFile.GetLength();
data = new byte[filelen];
_variant_t outData;
UINT dw=myFile.Read(data,filelen);
if (dw==filelen)
{
theApp.buffer->ByteToVariant(data,filelen,&outData);
myFile.Close();
int x0,x1,y1,y0;
BOOL ok1=theApp.face->FindFace(outData,&x0,&x1,&y0,&y1);
}
}
其中 ByteToVariant 函数为:void CImageBuffer::ByteToVariant(byte *bData, long bSize, VARIANT *pOutAarry)
{
SAFEARRAY* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements =bSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i <bSize; i++)
SafeArrayPutElement (psa, &i,bData++);
pOutAarry->vt = VT_ARRAY | VT_UI1;
pOutAarry->parray = psa;}
var
Stream: TMemoryStream;
p: pointer;
v: OleVariant;
begin
Stream:= TMemoryStream.Create;
try
Stream.LoadFromFile( 'c:\123.jpg' );
Stream.Seek(0,0);
v := VarArrayCreate ([0, Stream.Size - 1], varByte);
p := VarArrayLock (v);
Stream.Position := 0;
Stream.Read (p^, Stream.Size);
VarArrayUnlock (v);
finally
Stream.Free;
end;
end;
to :hongqi162
有一个用VC写的ActiveX组件,文件为xxx.dll ,通过Delphi加载组件后,自动生成了xxx_TBL.PAS 单元文件,其中组件有函数为 FindFace(aImage:oleVariant;a1,a2,b1,b3:Integer) ,通过沟通后,对方告诉我:aImage为二进制Byte数组。
我已经写函数进行了转换,如下,但是在调用FindFace还是不正确,对方给了代码如上,如何将其转换?
function ByteToOleVariant(Strm: Array of byte ): OleVariant;
var
Data: PByteArray;
i :integer;
begin
Result := VarArrayCreate([0, Length(Strm)-1], varByte);
Data := VarArrayLock(Result);
try
for i:=0 to Length(Strm)-1 do
Data^[i]:=Strm[i] ;
finally
VarArrayUnlock(Result);
end;
end;