Resource File Accessing

Daniel Keep daniel.keep.lists at gmail.com
Sun Dec 28 00:50:28 PST 2008



Jarrett Billingsley wrote:
> On Sat, Dec 27, 2008 at 11:33 PM, Plumm <sailormoontw at gmail.com> wrote:
>> Hi :
>>
>>   I would like to include a binary file about 64K in my exe to make it a single executable file, any tip how to make the resouce file? compile the resource file, and how to access it in the D program? And since I use DWT, I already linked my program with a dwt.res got from Frank, should I ask Frank for the rc file so that I can append the binary file into the rc file?
>>
>> Thanks
>>
> 
> Easier even than that.  The import() expression allows you to include
> arbitrary data in your app.
> 
> const data = cast(byte[])import("filename.dat");
> 
> All you have to do is pass the -J flag to DMD to indicate the path
> where filename.dat lives.  import() returns a string (a char[]) but
> you can cast it to whatever type you want, like I've casted to byte[]
> here.  :)

That's pretty much the cleanest solution there is.

Another trick I've used in the past is to simply append the extra data 
to the executable.  At least under Windows, this doesn't affect the 
program at all.

If the binary data isn't a fixed size, you can also append a small stub 
that specifies how big the file is.  Then, the file's contents start at 
(eof - stub_size - data_size) within the program's own executable.

Really, the only advantage to this over using import() is that you can 
change the data post-compilation (I've used this trick for a script 
interpreter which "compiled" scripts into a standalone executable.)

   -- Daniel



More information about the Digitalmars-d mailing list