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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2009, 17:09   #1
Валигози
 
Регистрация: 09.06.2009
Сообщений: 6
По умолчанию Как прикрутить к своему приложению "7z.dll"?

7z.dll - это dll-ка выполняющая основную работу в известном архиваторе "7zip": http://www.7-zip.org/
Вот какие функции она экспортирует:
SetLargePageMode
GetNumberOfMethods
GetNumberOfFormats
GetMethodProperty
GetHandlerProperty
GetHandlerProperty2
CreateObject

Собственно 7z.dll меня интересует вовсе не для работы с архивами *.7z, хочу воспользоваться возможностью архиватора 7zip "влезать" внутрь инсталляшки созданной с помощью Nullsoft-овского NSIS: http://nsis.sourceforge.net/Main_Page
Валигози вне форума Ответить с цитированием
Старый 09.06.2009, 17:59   #2
tavrocotaps
Пользователь
 
Аватар для tavrocotaps
 
Регистрация: 16.08.2008
Сообщений: 56
По умолчанию

Находишь описание содержимого dll и дергаешь нужные тебе функции.
Если вопрос в том, как, то вот пример:

Код:
procedure TForm1.Button1Click(Sender: TObject);
type
  TSomeFunc = procedure;
var
  DLLInstance : THandle;
  MyFunc      : TSomeFunc;
begin
  DLLInstance := LoadLibrary(PChar('MyDll.dll'));
  if (DLLInstance = 0) then begin
    MessageDlg('Файл MyDll.dll поврежден или отсутствует', mtError, [mbOK], 0);
    Exit;
  end;
  try
    @MyFunc := GetProcAddress(DLLInstance, 'FuncName');
    if Assigned(@MyFunc) then
      MyFunc( )
    else
      MessageDlg('Не найдена функция FuncName', mtError, 
[mbOK], 0);
  finally
    FreeLibrary(DLLInstance);
  end;
end;
forever trusting who we are...
tavrocotaps вне форума Ответить с цитированием
Старый 09.06.2009, 18:13   #3
Валигози
 
Регистрация: 09.06.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от tavrocotaps Посмотреть сообщение
Находишь описание содержимого dll и дергаешь нужные тебе функции.
Если вопрос в том, как, то вот пример:
[/CODE]
Вообще то вопрос был: Как прикрутить к своему приложению "7z.dll"?
Не понимаю, причём здесь какая-то "MyDll.dll"?
Валигози вне форума Ответить с цитированием
Старый 09.06.2009, 18:38   #4
tavrocotaps
Пользователь
 
Аватар для tavrocotaps
 
Регистрация: 16.08.2008
Сообщений: 56
По умолчанию

а чем 7z.dll отличается от любой другой dll-ки(.net Class Library не в счет)?
Или для тебя подставить в пример имя своей длл и своих функций есть задача невыполнимая?
forever trusting who we are...
tavrocotaps вне форума Ответить с цитированием
Старый 10.06.2009, 09:14   #5
Валигози
 
Регистрация: 09.06.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от tavrocotaps Посмотреть сообщение
а чем 7z.dll отличается от любой другой dll-ки(.net Class Library не в счет)?
Или для тебя подставить в пример имя своей длл и своих функций есть задача невыполнимая?
OK. Где скачать эту самую "MyDll.dll" с помощью которой можно "влезать" внутрь инсталляшки созданной с помощью Nullsoft-овского NSIS (как это умеет 7z.dll)?
Валигози вне форума Ответить с цитированием
Старый 10.06.2009, 09:18   #6
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,759
По умолчанию

Жесть!
Ты же сам сказал что у тебя уже есть библиотека.
FaTaL вне форума Ответить с цитированием
Старый 10.06.2009, 09:18   #7
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
Где скачать эту самую "MyDll.dll" с помощью которой можно "влезать" внутрь
, улыбнуло

Не пробывал сделать так?
Код:
procedure TForm1.Button1Click(Sender: TObject);
type
  TSomeFunc = procedure;
var
  DLLInstance : THandle;
  MyFunc      : TSomeFunc;
begin
  DLLInstance := LoadLibrary(PChar('7z.dll'));
  if (DLLInstance = 0) then begin
    MessageDlg('Файл 7z.dll поврежден или отсутствует', mtError, [mbOK], 0);
    Exit;
  end;
  try
    @MyFunc := GetProcAddress(DLLInstance, 'SetLargePageMode');
    if Assigned(@MyFunc) then
      MyFunc( )
    else
      MessageDlg('Не найдена функция SetLargePageMode', mtError, 
[mbOK], 0);
  finally
    FreeLibrary(DLLInstance);
  end;
end;
С проверкой остальных функций надюсь разберешься.

Если тебе уже известны функции и их параметры, то к ним можно оброщаться следующим образом
Код:
  private
    { Private declarations }
  public
    { Public declarations }
  end;

function SetLargePageMode: String; stdcall; external '7z.dll';

Последний раз редактировалось S@fer; 10.06.2009 в 09:23.
S@fer вне форума Ответить с цитированием
Старый 10.06.2009, 10:11   #8
Валигози
 
Регистрация: 09.06.2009
Сообщений: 6
По умолчанию

Бесполезный флуд.
Я спрашиваю как мне в своём приложении воспользоваться возможностями которые предоставляет 7z.dll из дистрибутива архиватора 7zip - мне же отвечают как загрузить любую DLL к своему приложению.
Я свои DLL-ки писал и подключал ещё в те времена, когда самой свежей Delphi была Delphi 3.
Валигози вне форума Ответить с цитированием
Старый 10.06.2009, 10:25   #9
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,455
По умолчанию

вОТ эТо жЕСтЬ !!!!!!!!!!
Валигози! почитай тему заново или сколько потребуется, может и поймешь )
uberchel вне форума Ответить с цитированием
Старый 10.06.2009, 10:36   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Валигози
Скажи ты знаешь какие функции в этой ДЛЛ что делают? Если нет оставь эту идею, или реинженируй ДЛЛку. Тебе пытаются сказать что функции из этой ДЛЛ вызываются так-то, но что они делают, какие параметры принимают, может сказать только автор или опытный кракер.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. 2 задачи (Программа "Верификация","КАК БРИГАДИРУ РАЗДЕЛИТЬ ЗАРОБОТАННЫЕ ДЕНЬГИ") Valik102 Помощь студентам 3 20.05.2009 20:42
как превратить "визуальную" иерархию в 1 столбце в "реальную" в нескольких eto Microsoft Office Excel 4 12.03.2009 13:55
Как "динамически" использовать "DLL" Air Общие вопросы Delphi 7 11.12.2007 21:55
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49