Jarrett Billingsley wrote:
On Sat, Dec 27, 2008 at 11:33 PM, Plumm <[email protected]> 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

Reply via email to