Вы можете хранить данные в потоке NTFS. Таким образом, вы можете получить реальный путь, указывающий на ваши данные, которые вы можете дать своей DLL в виде
x:\myfile.exe:mystreamname
Это работает точно так же, как обычный файл, однако это работает, только если используемая файловая система NTFS. Это стандартно для Windows в настоящее время, но, конечно, это не вариант, если вы хотите поддерживать более старые системы или хотели бы иметь возможность запускать это с USB-флешки или подобного. Обратите внимание, что любые потоки, присутствующие в файле, будут потеряны, если файл будет отправлен как вложение в почту или просто скопирован из раздела NTFS в раздел FAT32.
Я бы сказал, что наиболее совместимым способом было бы записать ваши данные в реальный файл, но вы, конечно, можете сделать это одним способом в системах NTFS и другим способом в системах FAT. Я рекомендую против этого из-за дополнительной сложности. Разумеется, правильным способом было бы распространять ваши файлы отдельно, но, поскольку вы указали, что вам это не нужно, вам следует в этом случае записать его во временный файл и указать dll путь к этому файлу. Убедитесь, что вы записали временный файл во временный каталог пользователя (вы можете найти путь, используя GetTempPath в C / C ++).
Другой вариант - написать драйвер фильтра файловой системы, но я настоятельно рекомендую эту дорогу. Такого рода побеждает и цель использования одного файла ...
Кроме того, если вам нужен только один файл для распространения, как насчет использования zip-файла или установщика?