unit datastreamer; interface uses sysutils; type datastreamer_t = Pointer; function datastreamer_create: datastreamer_t; cdecl; external 'datastreamer.dll'; procedure datastreamer_destroy(ds: datastreamer_t); cdecl; external 'datastreamer.dll'; function datastreamer_errormessage: PChar; cdecl; external 'datastreamer.dll'; function datastreamer_open(ds: datastreamer_t; dsn, uid, pwd: PChar): Integer; cdecl; external 'datastreamer.dll'; function datastreamer_setfield(ds: datastreamer_t; table, pk, datafield: PChar): Integer; cdecl; external 'datastreamer.dll'; function datastreamer_setvalue(ds: datastreamer_t; id: Integer; val: PChar): Integer; cdecl; external 'datastreamer.dll'; type TDataStreamer = class protected ds: datastreamer_t; public constructor Create; destructor Destroy; override; procedure Open(dsn, uid, pwd: string); virtual; procedure SetField(table, pk, datafield: string); virtual; procedure SetValue(id: Integer; val: string); virtual; end; implementation { TDataStreamer } constructor TDataStreamer.Create; begin inherited; ds := datastreamer_create; end; destructor TDataStreamer.Destroy; begin datastreamer_destroy(ds); inherited; end; procedure TDataStreamer.Open(dsn, uid, pwd: string); var puid: PChar; ppwd: PChar; begin if uid = '' then puid := nil else puid := PChar(uid); if pwd = '' then ppwd := nil else ppwd := PChar(pwd); if datastreamer_open(ds, PChar(dsn), puid, ppwd) <> 0 then raise Exception.Create(datastreamer_errormessage); end; procedure TDataStreamer.SetField(table, pk, datafield: string); begin if datastreamer_setfield(ds, PChar(table), PChar(pk), Pchar(datafield)) <> 0 then raise Exception.Create(datastreamer_errormessage); end; procedure TDataStreamer.SetValue(id: Integer; val: string); begin if datastreamer_setvalue(ds, id, Pchar(val)) <> 0 then raise Exception.Create(datastreamer_errormessage); end; end.