2016-08-27 3 views
-4

Это может показаться глупым вопросом, но здесь идет. Я хотел бы знать, как хранить изображение в dll и использовать его в программе - желательно без его извлечения. Имел ли кто-нибудь опыт в этом, говоря один язык для dll, а другой для исполняемого файла?Как использовать образ из dll в моем исполняемом файле?

+0

Вы не можете сохранить и запустить исполнимый в другом исполнимом без каких-либо уловок (например, хранить все байты DLL в массиве и загружать DLL самостоятельно, http://stackoverflow.com/questions/22707582/runpe-c-only-works-with-32-console). Если вы хотите загрузить, например, .NET DLL, вам нужно использовать хостинг CLR. – DogeAmazed

+0

Вы имеете в виду как растровый ресурс или что-то еще? – rustyx

+0

Я имею в виду растровое изображение или что-то в этом роде. В основном я хотел сохранить часть моего графического интерфейса, который частично составлен из растровых изображений внутри dll и сможет использовать их внутри моего exe - поэтому передайте растровое изображение в exe из dll. Я делаю это как часть проекта DirectX. Другой способ, который я думал, состоял в том, чтобы хранить ресурсы внутри самого exe, но я хотел посмотреть, возможно ли вариант dll. –

ответ

4

Сохраните изображение в файл, затем напишите файл .rc, который ссылается на файл изображения и присваивает ему идентификатор. Скомпилируйте файл .rc в файл .res и поместите его в свою DLL. Это сохраняет данные изображения как ресурс в DLL.

Во время выполнения, приложение может:

  • статической ссылка на загрузку DLL

  • динамического путем LoadLibrary()

А затем получить доступ к данным изображений, используйте либо:

  • FindResource(), LoadResource() и LockResource() для доступа необработанных данных

  • LoadImage() для загрузки изображения в качестве HBITMAP и т.д.

  • DirectX, чтобы загрузить изображение в ID2D1Bitmap интерфейс

См. MSDN для получения дополнительной информации:

About Resource Files

Finding and Loading Resources

How to Load a Bitmap from a Resource

+0

Мне нравится эта идея, поскольку я работаю над complier - я просто не добавил функцию указателя в сам компилятор. На данный момент я могу подключиться к dll и возвращать строки и ints и т. Д. Любые идеи по возврату указателей? Я понимаю, что это может быть довольно сложно - я бы назвал dll и, возможно, должен был приложить как процесс или что-то еще - надеюсь, вы получите то, что я говорю! :) –

+1

Нет. Я не понимаю, как это относится к тому, о чем говорит Реми. О каких указателях вы говорите? Эти файлы .res/.rc предназначены для разделов ресурсов результирующего PE. – andlabs

+0

Lol! Извините за это andlabs - я действительно устал, когда задал вопрос - я имел в виду функцию LockResource(), которая извлекает указатель на ресурс, - я ответил, потому что это был другой метод, который я пытался использовать для чего-то похожего на мой оригинальный вопрос но это не дало желаемого результата. –

Смежные вопросы