Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование dll из res файла.. как?! 
:(
    Опции темы
Scope
  Дата 11.7.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.6.2007

Репутация: нет
Всего: нет



Имеем файл pdf.dll, без исходников. Имеем процедуры и функции, записаные в отдельном pdfhdr.pas файле, обращающиеся к этой библиотеке.

Кусок кода: 
Код


unit pdfhdr;

interface

uses
  Windows, Classes, Graphics, ShellAPI;


blablablablabla
blablablablabla
blablablablabla


implementation

  procedure RolePDFBeginDoc(License, FileName, Title, Author, Subject, Keywords,
    Creator: PChar; PageWidth, PageHeight: integer);
    stdcall;

  external 'pdf.dll';


  procedure RolePDFNewPage; stdcall; external 'pdf.dll';
  procedure RolePDFEndDoc; stdcall; external 'pdf.dll';
  function RolePDFGetDC: HDC; stdcall; external 'pdf.dll';
  function RolePDFPageCount: integer; stdcall; external 'pdf.dll';
  function RolePDFPageWidth: integer; stdcall; external 'pdf.dll';
  function RolePDFPageHeight: integer; stdcall; external 'pdf.dll';
  function RolePDFAddOutline(Title: PChar; ParentID, PageNo, Top: integer):
    integer; stdcall; external 'pdf.dll';

procedure Register;
begin
  RegisterComponents('Roledata', [TRolePDF]);
end;

constructor TRolePDF.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FLicense := TStringList.Create;
  FCanvas := TCanvas.Create;
  PageSize := psA4;
end;

destructor TRolePDF.Destroy;
begin
  FLicense.Free;
  FCanvas.Free;
  inherited Destroy;
end;

procedure TRolePDF.SetOrientation(Value: TPageOrientation);

  procedure swap;
  var
    n: integer;
  begin
    n := FPageWidth;
    FPageWidth := FPageHeight;
    FPageHeight := n;
  end;

begin
  FOrientation := Value;
  if FOrientation = poPortrait then begin
    if FPageWidth > FPageHeight then swap;
  end
  else begin
    if FPageWidth < FPageHeight then swap;
  end;
end;


blablablablabla


procedure TRolePDF.NewPage;
begin
  RolePDFNewPage;
end;


blablablablabla
blablablablabla
blablablablabla




pdf.dll скомпилен в res файл:
pdfdll.rc=
Код

pdfdll RCDATA "pdf.dll"


Вопрос- каким образом переделать код pdfhdr, чтоб он обращался к dll'ке в res файле?
PM MAIL   Вверх
bartram
Дата 11.7.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Цитата(Scope @  11.7.2008,  19:21 Найти цитируемый пост)
Вопрос- каким образом переделать код pdfhdr, чтоб он обращался к dll'ке в res файле? 

Насколько я знаю - никак. Сначала распаковываешь длл из ресурсов, а уже потом обращаешься к её функциям.


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Scope
Дата 11.7.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.6.2007

Репутация: нет
Всего: нет



Ага.. даже так.. и как это реализовать?
PM MAIL   Вверх
aktuba
Дата 11.7.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата(Scope @  11.7.2008,  18:41 Найти цитируемый пост)
Ага.. даже так.. и как это реализовать? 

А зачем ты ее в ресурсы то запихнул???


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Scope
Дата 11.7.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.6.2007

Репутация: нет
Всего: нет



Зачем- изучаю возможности языка, цель- минимум "мусора", один ехе.

По идее dll можно распаковывать в память, вопрос- как это сделать? Работает ли Delphi 2007 корректно с этой функцией? Знаю что в 5 и 6 были утечки памяти.
PM MAIL   Вверх
aktuba
Дата 11.7.2008, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата(Scope @  11.7.2008,  20:15 Найти цитируемый пост)
Зачем- изучаю возможности языка, цель- минимум "мусора", один ехе.

 smile DLL как относится к языку Delphi???

Скажем так - если есть желание запихнуть все в один exe-файл, то это не проблема. Но вот распаковывать такие вещи лучше на диск, а не в память.

Цитата(Scope @  11.7.2008,  20:15 Найти цитируемый пост)
Работает ли Delphi 2007 корректно с этой функцией? Знаю что в 5 и 6 были утечки памяти. 

Ты про какую функцию?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
MetalFan
Дата 11.7.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



стандартными методами загрузить dll в память без использования LoadLibrary(Ex) не выйдет. но есть нестандартные решения...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Scope
Дата 11.7.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.6.2007

Репутация: нет
Всего: нет



Цитата(aktuba @ 11.7.2008,  20:38)
smile DLL как относится к языку Delphi???

Скажем так - если есть желание запихнуть все в один exe-файл, то это не проблема. Но вот распаковывать такие вещи лучше на диск, а не в память.

Ты про какую функцию?

Я не пойму- почему Вы так цепляетесь к словам? Я изучаю делфи как свой первый язык программирования приложений третий день.

И каким образом это можно сделать, а потом убить распакованный файл?

Я про функции записи в память и успешного её высвобождения в дальнейшем.
PM MAIL   Вверх
bartram
Дата 11.7.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Цитата(Scope @  12.7.2008,  00:26 Найти цитируемый пост)
Я про функции записи в память и успешного её высвобождения в дальнейшем. 

Распаковывание dll в память, не очень хороший стиль программирование, а почему не на диск распаковывать?


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
aktuba
Дата 11.7.2008, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата(Scope @  11.7.2008,  23:26 Найти цитируемый пост)
Я не пойму- почему Вы так цепляетесь к словам?

Потому, что ты говоришь о вещах, в которых либо плохо понимаешь, либо не понимаешь их назначений. DLL для того и предназначена, чтобы быть отдельно от приложения, а ты пытаешься засунуть ее в ресурсы и оттуда использовать. Да, это реализуемо, но если пользователь узнает об этом - вряд ли он будет доверять такому приложению.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Scope
Дата 12.7.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.6.2007

Репутация: нет
Всего: нет



Прога по сути для составления отчётов для бухгалтерии, задача максимально скрыть от пользователя файлы не стоит.

Каким образом можно реализовать запись контента ресурса на диск, а после исполнения процедуры, использующей этот файл благополучно убить его?
PM MAIL   Вверх
Alkash
Дата 12.7.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Юзать temp файлы.


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
bems
Дата 14.7.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



FindResource, LoadResource, LockResource, TFileStream, DeleteFile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
MetalFan
Дата 14.7.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(bems @  14.7.2008,  17:09 Найти цитируемый пост)
FindResource, LoadResource, LockResource

TResourceStream ?  smile 


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bems
Дата 14.7.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(MetalFan @  14.7.2008,  17:43 Найти цитируемый пост)
TResourceStream ?

или так (с) Отец Народов



--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1050 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.