1.新建 -> 其他 -> ActiveX -> ActiveX lib库
2.新建 -> 其他 -> ActiveX -> Automation Object 自动化对像
3.返回值数组
![]()
Code
function Ttcd.fetch: OleVariant;
var
val:OleVariant;
i:Integer;
Field:TBytesField;
begin
try
val := VarArrayCreate([0, fieldcount-1], varVariant);
for i:=0 to fieldcount-1 do
begin
Field :=TBytesField(qry1.FieldByName(qry1.Fields.Fields[i].DisplayName));
val[i]:=Field.AsString;
end;
Result := val;
except
on E: Exception do Result := E.Message;
end;
end;
4:返回图片
![]()
Code
unit Unit1;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
ComObj, ActiveX, PicToJpg_TLB, StdVcl,Classes,ExtCtrls;
type
TPicToJpgClass = class(TAutoObject, IPicToJpgClass)
protected
function jp2tojpg(const jp2file: WideString): WideString; safecall;
end;
implementation
uses
ComServ,jp2img, jpeg,
IdBaseComponent, IdCoder, IdCoder3to4, IdCoderMIME
;
function TPicToJpgClass.jp2tojpg(const jp2file: WideString): WideString;
var
MS:TMemoryStream;
imgBox: TImage;
jpg:TJPEGImage;
size:Integer;
str:string;
Encoder: TIdEncoderMIME;
begin
MS:=TMemoryStream.Create;
MS.LoadFromFile(jp2file);
MS.Position :=0;
imgBox:= TImage.Create(nil);
imgBox.Picture.Graphic := TJP2Image.Create();
imgBox.Picture.Graphic.LoadFromStream(MS);
MS.Free;
jpg:=TJPEGImage.Create;
jpg.Assign(imgBox.Picture.Bitmap);
imgBox.Picture.Assign(nil);
imgBox.Free;
MS:=TMemoryStream.Create;
jpg.SaveToStream(MS);
jpg.Free;
MS.Position :=0;
size := MS.Size;
SetLength(str, size);
MS.Read(str[1], size);
MS.Free;
Encoder:= TIdEncoderMIME.Create;
Result:=Encoder.Encode(str);
Encoder.Free;
end;
initialization
TAutoObjectFactory.Create(ComServer, TPicToJpgClass, Class_PicToJpgClass,
ciMultiInstance, tmApartment);
TJP2Image.RegisterFileFormats;
end.
echo base64_decode($obj->jp2tojpg('D:\wwwroot\tcd\a1.jp2'));
注册
%systemroot%\system32\regsvr32.exe "my_odbc.dll"
卸载
%systemroot%\system32\regsvr32.exe -U "my_odbc.dll"
调用
new COM("my_odbc.obj") ;// "工程名_类名"