... export a big const from a DLL?
Author: Max Kleiner
{
First you declare the type of the const and second you define a wrap function around the type:
}
library hexerdll;
type
Tviergewinnt_exe = array[0..88598] of Byte;
const
viergewinnt_exe: TViergewinnt_exe =
($4D,$5A,$00,$01,$01,$00,$00,$00,$08,$00,$10,$00,$FF,$FF,$08,$00,$00,$01,$00,$00,
$00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
.............,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00);
function getArrayofByte: Tviergewinnt_exe;
begin
Result := viergewinnt_exe;
end;
exports
getArrayofByte;
The call of the client has the following structure: the important thing is
to declare a local
var
of the
const in our case dllexe: Tviergewinnt_exe;
unit playmain;
// examples to call the embedded file in the unit or the dll
// some code ........
type
Tviergewinnt_exe = array[0..88598] of Byte;
function getArrayofByte: Tviergewinnt_exe; external 'hexerdll';
procedure TForm1.btnApploadClick(Sender: TObject);
var
bitStream: TMemoryStream;
dllexe: Tviergewinnt_exe;
begin
bitStream := TMemoryStream.Create;
dllexe := getArrayofByte;
try
//without a dll you call const name
//bitStream.Writebuffer(viergewinnt_exe, sizeof(viergewinnt_exe));
// import DLL const
bitStream.Writebuffer(dllexe, SizeOf(dllexe));
bitStream.Position := 0;
bitstream.LoadFromStream(bitstream);
bitstream.SaveToFile('viergewinnt.exe');
case WinExec(PChar('viergewinnt.exe'), SW_SHOWDEFAULT) of
0: ShowMessage('The system is out of memory or resources.');
ERROR_BAD_FORMAT: ShowMessage('The .EXE file is invalid (non-Win32.EXE or error in .EXE image).');
ERROR_FILE_NOT_FOUND: ShowMessage('The specified file was not found.');
ERROR_PATH_NOT_FOUND: ShowMessage('The specified path was not found.');
end;
finally
bitStream.Free;
end;
end;
// http://www.softwareschule.ch/download/hexer2.zip
printed from
www.swissdelphicenter.ch
developers knowledge base