i trying compile program getting error:
undeclared indentifier 'streamln'
i tried download psock.dcu , put library doesnt compile, looks compactible delphi 5,
unit resourceinfo; interface uses classes, sysutils, windows; type tresourceinfo = class; tdfmmode = ( dfmdata, dfmresource, dfmascii, dfmbinary); tdfm = class private fowner: tresourceinfo; fname: string; fdata: tstream; procedure setname(const value: string); procedure setowner(const value: tresourceinfo); public constructor create(aowner: tresourceinfo); destructor destroy; override; function savetofile(filename: tfilename; mode: tdfmmode): boolean; property data: tstream read fdata; property name: string read fname write setname; property owner: tresourceinfo read fowner write fowner; end; {tdfm} tresourceinfo = class(tcomponent) private factive: boolean; fdfms: tlist; fexefilename: tfilename; fmodule: thandle; fonactivate: tnotifyevent; fondeactivate: tnotifyevent; procedure setexefilename(const value: tfilename); procedure setactive(const value: boolean); function getdfms(index: cardinal): tdfm; function getdfmcount: cardinal; protected procedure clear; public constructor create(aowner: tcomponent); override; destructor destroy; override; function adddfm(const name: string; adata: tmemorystream): integer; procedure deletedfm(const name: string); property dfmcount: cardinal read getdfmcount; property dfms[index: cardinal]: tdfm read getdfms; procedure enumdfmnames; property module: thandle read fmodule; published property active: boolean read factive write setactive; property exefilename: tfilename read fexefilename write setexefilename; property onactivate: tnotifyevent read fonactivate write fonactivate; property ondeactivate: tnotifyevent read fondeactivate write fondeactivate; end; {tresourceinfo} procedure register; implementation uses winsock; resourcestring rserrorloadingexefile = 'an error ocurred loading file %s, may not executable module'; procedure register; begin registercomponents('+hcu', [tresourceinfo]); end; {register} { tresourceinfo } function tresourceinfo.adddfm(const name: string; adata: tmemorystream): integer; var fdfm: tdfm; begin fdfm := tdfm.create(self); fdfm.name := name; fdfm.data.size := adata.size; fdfm.data.seek(0, 0); adata.seek(0, 0); fdfm.data.copyfrom(adata, adata.size); result := fdfms.add(fdfm); end; {tresourceinfo.adddfm} constructor tresourceinfo.create(aowner: tcomponent); begin inherited; factive := false; fdfms := tlist.create; fmodule := 0; end; {tresourceinfo.create} destructor tresourceinfo.destroy; begin clear; fdfms.free; inherited; end; {tresourceinfo.destroy} function cb_enumdfmnameproc(hmodule: thandle; lpsztype, lpszname: pchar; lparam: integer): boolean; stdcall; var ms: tmemorystream; rs: tresourcestream; buffer: array of byte; begin tresourceinfo(lparam) begin rs := tresourcestream.create(tresourceinfo(lparam).module, lpszname, lpsztype); try ms := tmemorystream.create; try try setlength(buffer, 4); rs.read(buffer[0], sizeof(buffer)); if string(buffer) = 'tpf0' begin rs.seek(0, 0); objectbinarytotext(rs, ms); ms.seek(0, 0); adddfm(strpas(lpszname), ms); end; except raise; end; ms.free; end; rs.free; end; end; result := true; end; {cb_enumdfmnameproc} procedure tresourceinfo.enumdfmnames; begin if fmodule > 0 enumresourcenames(fmodule, rt_rcdata, @cb_enumdfmnameproc, integer(self)); end; {tresourceinfo.enumdfmnames} procedure tresourceinfo.deletedfm(const name: string); var i: cardinal; begin if fdfms.count > 0 := pred(fdfms.count) downto 0 if uppercase(tdfm(fdfms[i]).name) = uppercase(name) begin fdfms.delete(i); break; end; end; {tresourceinfo.deletedfm} procedure tresourceinfo.setactive(const value: boolean); begin if factive <> value begin if value begin if fmodule > 0 freelibrary(fmodule); (* load_library_as_datafile if value given, function simple mapping of file address space. nothing done relative executing or preparing execute code in mapped file. function loads module if data file. can use module handle function returns in case win32 functions operate on resources. use flag when want load dll in order extract messages or resources it, , have no intention of executing code.if value not given, function maps file address space in manner normal executable module. behavior of function identical of loadlibrary in regard. *) fmodule := loadlibraryex(pchar(fexefilename), 0, load_library_as_datafile); if not (fmodule >= 32) raise exception.createfmt(rserrorloadingexefile, [fexefilename]); if assigned(fonactivate) fonactivate(self); end else begin clear; if fmodule > 0 begin freelibrary(fmodule); fmodule := 0; end; if assigned(fondeactivate) fondeactivate(self); end; factive := value; end; end; {tresourceinfo.setactive} procedure tresourceinfo.setexefilename(const value: tfilename); begin if fexefilename <> value fexefilename := value; end; {tresourceinfo.setexefilename} function tresourceinfo.getdfms(index: cardinal): tdfm; begin result := tdfm(fdfms[index]); end; {tresourceinfo.getdfms} function tresourceinfo.getdfmcount: cardinal; begin result := fdfms.count; end; {tresourceinfo.getdfmcount} procedure tresourceinfo.clear; begin if fdfms.count > 0 while fdfms.count > 0 fdfms.delete(0); end; {tresourceinfo.clear} { tdfm } constructor tdfm.create(aowner: tresourceinfo); begin inherited create; fdata := tmemorystream.create; fname := ''; setowner(aowner); end; {tdfm.create} destructor tdfm.destroy; begin fdata.free; inherited; end; {tdfm.destroy} function tdfm.savetofile(filename: tfilename; mode: tdfmmode): boolean; function endofstream(stream: tstream): boolean; begin stream result := position = size; end; {endofstream} var fs: tfilestream; ms: tmemorystream; s: string; i, j: byte; begin fs := tfilestream.create(filename, fmcreate or fmshareexclusive); try fdata.seek(0, 0); case mode of dfmascii: begin ms := tmemorystream.create; try s := fname + ' rcdata' + #13#10 + '{'; streamln(fs, s); objecttexttobinary(fdata, ms); ms.seek(0, 0); while not endofstream(ms) begin s := ''''; := 0 15 begin if ms.read(j, sizeof(j)) = 0 break; s := concat(s, format('%2.2x', [j])); if (i = 15) or endofstream(ms) s := concat(s, '''') else s := concat(s, ' '); end; if endofstream(ms) s := concat(s, #13#10 + '}'); streamln(fs, s); end; ms.free; end; end; dfmbinary: objecttexttobinary(fdata, fs); end; fs.free; end; end; {tdfm.savetofile} procedure tdfm.setname(const value: string); begin if fname <> value fname := value; end; {tdfm.setname} procedure tdfm.setowner(const value: tresourceinfo); begin fowner := value; end; {tdfm.setowner} end.
how can declare successfully?
appears me winsock unit not have streamln
function (as powersock's psock.pas
unit uses winsock imported unit).
the streamln function in psock.pas
adds crlf sequence string passed parameter before calling tstream.writebuffer
method of passed tstream
parameter.
here's google cache snapshot powersock's source code of psock.pas
Comments
Post a Comment