On Monday, 6 June 2016 at 02:18:48 UTC, docandrew wrote:
On Monday, 6 June 2016 at 02:05:09 UTC, Pie? wrote:
I saw somewhere someone explaining how to embed resources into
a binary using the import keyword.
I believe the essentially converted the file into a ubyte or
something and then wrote that out to a temp file and read in
the temp file... this seems a bit of a kludge to me.
Is it possible to do the same, but create a sort of "in
memory" file layout?
While I can modify my own routines to read the "file" from
memory, I can't do that easily with outside code(I could
modify the binaries).
Basically reading a file has to read it to memory, and if the
file data already exists in memory, there is no point to read,
just get it direct.
Any thoughts on this?
Because D allows such an embedding feature, maybe the file
system should allow working with this concept? That way, it
becomes VERY easy to embed files into the binary and work with
them like they wernt. Also, going between the two different
versions(embedded vs not) could be done with version (Release).
I'm not sure about import, but one option is to put the
external files directly in your binary as part of the linker
step. Check out:
http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967
On Windows I think there's a way to embed files in .DLLs and
then link those into your executable, but I'm ignorant of the
steps/tools required.
-Jon
Check out https://p0nce.github.io/d-idioms/ for embedding dll's.
It's much easier than using the link you give.
The problem is the same though, How to use the in memory data
rather than re-reading it? It's not a problem of embedding but
that the routines that use the data expect files, not memory
backed virtual files.