![]() |
![]() |
Eg 02.07.2004 - 19:10 |
Есть буфер, содержащий какое-то количесвто байт, как мне его выдать за ресурс? Чтобы использовать стандартную фунцию загрузки, например изображения? Тоесть фактически есть виртуальный файл(в виде массива байт,причём в этом массиве есть всё необходимое, как то иформация о типе, размере и т.д.(ну просто как бы файл считанный посимвольно с диска)), а его надо выдать либо за ресурс, либо за реальный файл(но только не сохраняя на диске, конечно) чтобы можно было использовать стандартную фунцию загрузки( например winapiвскую ) ... Похелпите, плиз |
Eg 1 - 03.07.2004 - 12:39 |
Друзья, я , конечно, понимаю что находить объём куба интереснее:) НО уж очень надо. Неужели никто не пытался представить полученную инфу как ресурс для применения стандартных функции загрузки? ВСё сами пишем что-ли: |
Monty 2 - 03.07.2004 - 22:59 | попробуй создать отображаемый файл, загнать в него ресурс и юзать его хендл дальше |
archimag 3 - 04.07.2004 - 02:09 | Что за стандартные функции загрузки? Я не совсем понял, чего ты хочешь. И о каком ресурсе идёт речь? Если о речь о ресурсах, получаемых вызовом LoadResource, то просто используешь указатель (полученный вызовом GlobalAlloc) на свои данные. Или я что-то не так понял? |
Старый Добрый UE 4 - 04.07.2004 - 04:43 | Действительно, не вполне понятна задача. Вероятно, есть нечто, что умеет загружать данные только из ресурсов - верно? И тебе требуется, не имея заранее готового ресурса, свои данные скармливать этому нечту? |
Eg 5 - 04.07.2004 - 08:10 |
>попробуй создать отображаемый файл, загнать в него ресурс и юзать его >хендл дальше А как это сделать? Вот есть у меня массив BYTE ( указатель на него ) и его размер DWORD КАк создать из этого отображаемый файл ( насколько я понимаю не на винте? ) >Что за стандартные функции загрузки? Я не совсем понял, чего ты хочешь. И >о каком ресурсе идёт речь? Есть особый формат, скажем закадированный особым образом от взлома:), это просто поток, я умею его раскодировать и распоздать вид ресурса из потока, скажем я распознал битмап, я его из потока (std::ifstream) копирую в массив BYTE, теперь хочется применить например функцию LoadImage, но она работает только с ресурсами и файлами, как ей припехнуть мой массив, чтобы она решила что это ресурс или файл. > >Действительно, не вполне понятна задача. Вероятно, есть нечто, что умеет >загружать данные только из ресурсов - верно? И тебе требуется, не имея >заранее готового ресурса, свои данные скармливать этому нечту? > Точно, точно, только умеющее загружать не только из ресурса, а например из файла? Есть способ создать что-то что вело бы себя как файл при этом файлом не являясь? |
archimag 6 - 04.07.2004 - 13:16 |
Проецируемый файл тебе не поможет, он не для этого используется. ... Если надо работать с битмапом, то создаёшь структуру BITMAP, а потом вызываешь CreateBitmapIndirect, в итоге получаешь HBITMAP, который можно использовать в функциях рисования. Вообще-то, любой ресурс можно создавать в памяти. ... Всё таки не пойму, зачем тебе файл? А если действительно нужен, то почему не создать временный файл? Можно, конечно, написать имитирующий драйвер, но зачем такие сложности? |
Eg 7 - 04.07.2004 - 13:32 |
>CreateBitmapIndirect Но я не хочу заниматься анализом данных, просто хочется Create... и всё:) Есть куча других функций где такая фича не прокатит. Например в CD3DX есть функция (точно не помню) CreateTextureFromResource хочется подсовывать её ресурс. >Вообще-то, любой ресурс можно создавать в памяти КАК? |
archimag 8 - 04.07.2004 - 16:03 |
>просто хочется Create... и всё Я понимаю, что хочется, но... система предоставляет тебе только необходимый набор функций. Набор функций на все случаи жизни был бы слишком велик (если не бесконечен). Комбинируя существующие функции ты можешь добиться желаемого эффекта. Без программирования здесь не обойтись... >КАК? В каждом случае по разному. Смотри документацию. Лёгкой жизни никто и не обещал :-) |
Eg 9 - 04.07.2004 - 17:21 |
>Набор функций на все случаи жизни был бы слишком велик Та всего-то надо файл, ресурс, и область в оперативной памяти - вот счастье было бы:) ... Ладненько быдем думать дальше... |
Старый Добрый UE 10 - 05.07.2004 - 02:48 | И все-таки это таинственное нечто что принимает на входе? Если HMODULE, тип и имя ресурса, то можно самому сконструировать в памяти "модуль" с ресурсом - это не такая и сложная задача, вполне подъемная, имхо. Можно уточнить задачу? |
Eg 11 - 05.07.2004 - 07:42 |
Ну хорошо, сейчас это выглядит так Bitmap::Bitmap( std::istream& stream ) { DWORD size = ResUtils::GetSizeFromStream( stream ); std::ofstream ofile( "temp.bmp" , std::ios::out|std::ios::binary ); for ( DWORD i =0 ; i< size ; i++ ) ofile.put( stream.get() ); hBitmap = LoadImage( NULL , "temp.bmp" , IMAGE_BITMAP , 0, 0, LR_LOADFROMFILE ); BITMAP Bitmap; GetObject( hBitmap , sizeof(BITMAP) , &Bitmap ); width = Bitmap.bmWidth; height = Bitmap.bmHeight; DeleteFile( "temp.bmp" ); } Хотелось бы чтобы это выглядело так: Bitmap::Bitmap( std::istream& stream ) { DWORD size = ResUtils::GetSizeFromStream( stream ); BYTE* resource = new BYTE[ size ]; for ( DWORD i =0 ; i< size ; i++ ) resourse[i] = stream.get(); ...Тут происходит чудо перевоплошения... hBitmap = LoadImage( NULL , RES_ID , IMAGE_BITMAP , 0, 0, NULL ); BITMAP Bitmap; GetObject( hBitmap , sizeof(BITMAP) , &Bitmap ); width = Bitmap.bmWidth; height = Bitmap.bmHeight; delete[] resource; } Насчёт stream.get(); просьба не беспокоится, так как size - вовсе необязательно реальлый размер содердимого потока, поток ведет себя полиморфно, и get() может по ходу распоковывать, например, сжатые данные, так что без этого цикла не обойтись. RES_ID есть что-то типа (LPSTR)((DWORD)((WORD)res_id)) где res_id - просто целое число идентификатор ресурса. |
Eg 12 - 05.07.2004 - 07:44 |
Конечно после ofile.put( stream.get() ); ofile.flush();ofile.close(); |
archimag 13 - 05.07.2004 - 10:59 | Eg: Точно не скажу, но попробуй использовать свой указатель на масив данных, вместо результата функций LoadImage или FindResource, самому лень проверять... |
Eg 14 - 05.07.2004 - 11:33 | Нифига не прокатит, уже пробовал:) |