Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2015, 15:10   #1
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию Ресурс из DLL

Здравствуйте!

Что-то не пойму в чем ошибка.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  LibHandle: THandle;
  ResStream: TResourceStream;

begin

    {Загружаем библиотеку}
    LibHandle := LoadLibrary('C:\Program Files\Opera x64\opera.dll');
    if LibHandle <> 0 then
      {Загружаем ресурс}
      ResStream := TResourceStream.Create(LibHandle,'9', RT_ICON);

    try
     
     Image1.Picture.Icon.LoadFromStream(ResStream);
    finally
      ResStream.Free();

    end;
Выскакивает ошибка : (при проверке показала, что ошибка в Vcl.Graphics, строка 10126
Image.SetSize(Stream.Size - Stream.Position); )

(На картинке видно, что в DLL такая картинка есть)
Изображения
Тип файла: png screenshot_20150711_151154.png (4.3 Кб, 102 просмотров)

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.

Последний раз редактировалось volod3000; 11.07.2015 в 15:33.
volod3000 вне форума Ответить с цитированием
Старый 11.07.2015, 17:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А какая ошибка? Ресурс не найден?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.07.2015, 17:37   #3
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

(при проверке показала, что ошибка в Vcl.Graphics, строка 10126
Image.SetSize(Stream.Size - Stream.Position);

Немного переделал :

Код:

var
  LibHandle: THandle;
  ResStream: TResourceStream;
begin

    {Загружаем библиотеку}
    LibHandle := LoadLibraryEx(PChar('C:\Program Files\Opera x64\opera.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
     if LibHandle<>0 then begin

    Label1.Caption := 'Handle окна: '+ IntToStr(LibHandle);
      {Загружаем ресурс}                               
      ResStream := TResourceStream.Create(LibHandle,'9','ICON');
     end;

    try
      
     Image1.Picture.Icon.LoadFromStream(ResStream);
    finally

      ResStream.Free();

    end;
Выдает ошибку : Resource 9 not found.
Изображения
Тип файла: png screenshot_20150711_151155.png (7.1 Кб, 92 просмотров)

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.

Последний раз редактировалось Stilet; 11.07.2015 в 19:08.
volod3000 вне форума Ответить с цитированием
Старый 11.07.2015, 19:10   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Выдает ошибку : Resource 9 not found.
Вот как раз эту ошибку у меня твой код из топа темы и выдавал. Тут я ничем не помогу, кроме как использовать EnumResourceNames() для получения списка ресурсов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.07.2015, 19:53   #5
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Была однажды подобная беда, совал я в ресурсы html файлы в секцию HTML, webbrouser их прекрасно видел, а вот resourcestream не находил((

решил проблему добавив include что-то в файле *.rc, что именно писал после include не помню, гугал знает, возможно include HTML

хз, мож поможет))
ДралсяСошибками вне форума Ответить с цитированием
Старый 12.07.2015, 03:09   #6
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Дайте угадаю. В 32-битное приложение грузится 64-битная DLL, LoadLibrary возвращает 0, в результате чего поток не создается, и разыменование его переменной валит AV.
Vapaamies вне форума Ответить с цитированием
Старый 12.07.2015, 08:05   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
LoadLibrary возвращает 0
Нет. Хендл нормальный. Иначе бы до работы с ресурсом не дошло. И дело не в х64, я код в топе у себя запустил, чтоб понять что за текст ошибки у ТС, а у меня х32.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.07.2015, 19:28   #8
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Смысл всех этих манипуляций вытащить иконку большего размеров 128x128 или 64x64

Попробовал вот так:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  aResInstance: THandle;
  ico: TIcon;
  rs: TResourceStream;

begin
 aResInstance := LoadLibraryEx(PWideChar('C:\Program Files\Opera x64\opera.exe'), 0, LOAD_LIBRARY_AS_DATAFILE);

                 rs := TResourceStream.CreateFromID(aResInstance, WORD(3), RT_ICON);


 ico:= TIcon.Create;
 ico.LoadFromStream(rs);                 //LoadFromResourceName(aResInstance, 'OPERA');

     if aResInstance<>0 then begin
        Image1.Picture.Icon.Assign(ico);
     end;
 ico.Free;
end;
Получил вот это (т.е. картинки нет)
Изображения
Тип файла: png screenshot_20150713_192754.png (2.6 Кб, 79 просмотров)

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 14.07.2015, 10:39   #9
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Вот интересно, каким образом Ресторатор вытягивает и показывает ресурсы ?

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 14.07.2015, 10:45   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Использует фунции WinAPI, или сам считывает из секций данные. Второе тоже не так уж и сложно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инструкция для сборки приложений на Qt в один exe без зависимостей от libstdc++-6.dll, libgcc_s_dw2-1.dll, Qt5Core.dll и т.д. 8Observer8 Qt и кроссплатформенное программирование С/С++ 12 25.06.2015 03:18
Ресурс в делфи zhal Общие вопросы Delphi 1 30.04.2015 08:48
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? AntyDES C# (си шарп) 11 10.10.2012 20:00
добавить ресурс Михаил Юрьевич Общие вопросы Delphi 11 30.08.2011 22:47
Ресурс версии STRELOK-2007 Общие вопросы Delphi 1 14.06.2010 16:17