Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить ресурс из dll? / 19 сообщений из 19, страница 1 из 1
18.01.2022, 20:30
    #40127575
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Здравствуйте!
Подскажите, пожалуйста, как получить png из ресурса, который находится dll?
...
Рейтинг: 0 / 0
18.01.2022, 20:51
    #40127582
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
LoadLibrary/GetModuleHandle - FindResourceEx - LoadResource - LockResource
...
Рейтинг: 0 / 0
18.01.2022, 20:54
    #40127584
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
LoadLibraryEx(..., LOAD_LIBRARY_AS_DATAFILE) + TResourceStream
...
Рейтинг: 0 / 0
18.01.2022, 21:19
    #40127589
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Смотрите, я хотел передавать функции, которая находится в dll, id ресурса, и чтоб она возвращала png. Но, проблема в том, что кода я говорю функции какой тип данных я жду от нее, при компиляции dll выходит ошибка: [dcc32 Fatal Error] Project1.dpr(14): F2613 Unit 'PngImage' not found .
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function GetIMG(ImageN: String): TPngImage export;
var
   Png: TPngImage;
begin
   Png := TPngImage.Create;
   try
     Png.LoadFromResourceName(HInstance, PChar(ImageN));
     result := Png; 
   finally
      Png.Free;
   end;
end;
...
Рейтинг: 0 / 0
18.01.2022, 21:26
    #40127592
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Женя32,

ну бл?*:!...
...
Рейтинг: 0 / 0
18.01.2022, 22:23
    #40127602
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
PngImage, ау-у!

Во-первых, найдите PngImage, вы его очевидно потеряли. Во-вторых, зачем вам экспортировать функцию, которая будет экспортировать ресурс, если вы можете напрямую получать этот ресурс, как вам и предлагают, через PTngImage.LoadFromResourceName?

С экспортом лучше и не связывайтесь, а то ведь набегаетесь по граблям при передаче строк и объектов, как у вас изображено.

В hInstance находится hModule того модуля, который вы в данный момент компилируете, будь то exe или dll. Вам надо будет только, в отличие от примера, брать не свой hInstance, а загрузить библиотеку и использовать её hModule.
...
Рейтинг: 0 / 0
18.01.2022, 22:52
    #40127613
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
ъъъъъ
Женя32,
ну бл?*:!...
Шедеврально! Мля, где так учат?
...
Рейтинг: 0 / 0
18.01.2022, 23:15
    #40127620
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
white_nigger
ъъъъъ
Женя32,
ну бл?*:!...
Шедеврально! Мля, где так учат?

Я самоучка...
...
Рейтинг: 0 / 0
18.01.2022, 23:39
    #40127629
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Женя32, а что мешает прочитать хоть одну книгу, чтоб найти бред в четырёх строчках кода? Или почитать про отладку? Ты даже не понимаешь, что пишешь, возвращая убитый объект
...
Рейтинг: 0 / 0
19.01.2022, 08:26
    #40127659
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
shalamyansky
... Во-вторых, зачем вам экспортировать функцию, которая будет экспортировать ресурс, если вы можете напрямую получать этот ресурс, как вам и предлагают, через PTngImage.LoadFromResourceName?
...

Можно пример с PTngImage.LoadFromResourceName?
...
Рейтинг: 0 / 0
19.01.2022, 08:42
    #40127663
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Женя32
shalamyansky
... Во-вторых, зачем вам экспортировать функцию, которая будет экспортировать ресурс, если вы можете напрямую получать этот ресурс, как вам и предлагают, через PTngImage.LoadFromResourceName?
...

Можно пример с PTngImage.LoadFromResourceName?

А Unit 'PngImage' ты уже нашел?
...
Рейтинг: 0 / 0
19.01.2022, 09:04
    #40127666
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
ъъъъъ

А Unit 'PngImage' ты уже нашел?

Нет, не нашел. В главной форме PngImage нормально подключается, а вот в dll нет... Если бы в dll подключился PngImage, то, думаю, вопрос был бы решен.
...
Рейтинг: 0 / 0
19.01.2022, 09:16
    #40127667
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Код: pascal
1.
function GetIMG(ImageN: String): TPngImage


Вы не можете вернуть TPngImage из dll
Обекты в dll и ОДНОИМЕННЫЕ объекты в EXE - это РАЗНЫЕ объекты
типичная Cannot Assign TFont to TFont
...
Рейтинг: 0 / 0
19.01.2022, 09:30
    #40127668
Женя32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
ОК.
Тогда как адаптировать этот код, чтоб из ресурса достать png?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TForm1.Button1Click(Sender: TObject);
var
  dll_instance: Thandle;
  SummaTotal: TSummaTotal;
begin
  dll_instance:= LoadLibrary('Example_dll.dll');
  @SummaTotal:= GetProcAddress(dll_instance, 'SummaTotal');
  Label1.Caption:= IntToStr(SummaTotal(5));
  FreeLibrary(dll_instance);
end;
...
Рейтинг: 0 / 0
19.01.2022, 11:22
    #40127706
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Женя32,

тебе нужно не функцию из dll импортировать, а ресурс загрузить.
Переменную Png создаешь в своём приложении, а потом картинку для нее загружаешь из dll. Для этого сначала загружаешь библиотеку (dll), код ты сам в одном из ответов тут приводил. Потом, как ты сам писал тут,
Код: pascal
1.
Png.LoadFromResourceName(HInstance, ImageN);


Первый параметр - хэндл библиотеки, который ты получаешь, если успешно загрузил библиотеку. Второй параметр - не PChar, как у тебя в коде, а строка.
...
Рейтинг: 0 / 0
19.01.2022, 11:42
    #40127715
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Женя32,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
   dll_name   : AnsiString;
   dll_instance : THandle;
begin
   dll_name := 'Example_dll.dll';

   dll_instance:= LoadLibraryEx(PAnsiChar(dll_name), 
                                0,
                                LOAD_LIBRARY_AS_DATAFILE); // !!!!
...
Рейтинг: 0 / 0
19.01.2022, 11:58
    #40127728
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
P.S.
хотя и написал AnsiString/PAnsiChar, но больше уже не уверен
...
Рейтинг: 0 / 0
19.01.2022, 12:47
    #40127747
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Женя32,

Лень лезть в Delphi, но подозреваю, что Graphics.PngImage в uses спасет гиганта мысли. Только в поисках PngImage, не более.

Женя, добрый совет. Отложите в сторону Delphi и книги по Delphi. Почитайте что-либо более общее: как устроена память компьютера, какие разделы (сектора) памяти бывают, модели памяти Windows, что такое адресное пространство процесса, когда нужно и как можно выделять и освобождать память и кто этим занимается, как DLL соотносится с процессом, как передаются параметры и результат функций, какие бывают соглашения вызова, что такое объекты, где они находятся и как они устроены, что происходит при их создании и освобождении, что такое указатель на объект, какие бывают и как устроены строки (дельфийские и null-terminated), кто и откуда выделяет им память...

Много вопросов, это далеко не все, но, честное слово, пока у вас в голове не будет лежать четкая картинка и ответы на них, не для экзаменатора, для себя, любое ваше движение будет бегом по граблям - много шишек и мало толку. К сожалению, я не могу порекомендовать конкретную литературу, но вот прямо так, по ключевым словам и идите. Простите за менторский тон, но, ИМХО, это лучший совет, который Вам тут могут дать по этой теме.
...
Рейтинг: 0 / 0
19.01.2022, 13:08
    #40127755
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить ресурс из dll?
Женя32, эту реплику, пожалуйста, не читайте.


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function GetIMG(ImageN: String): TPngImage export;
var
   Png: TPngImage;
begin
   Png := TPngImage.Create;
   try
     Png.LoadFromResourceName(HInstance, PChar(ImageN));
     result := Png; 
   finally
      Png.Free;
   end;
end;



Самое забавное, что этот вызов может и отработать. Объект освобожден, но память, в которой он находился, еще не затерта и, скорее всего, находится в доступной куче. Так что вызывающий код, весьма вероятно, даже сможет сделать 2-3 перехода по внутренним органам еще не разложившегося трупа, прежде чем напорется на AV. Что отвлечет наблюдающего от истинной причины недоразумения и добавит ему недоумения. Магия и коварство! С передачей строки похожий фокус. Проверять не буду.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить ресурс из dll? / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]