Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.12.2010, 15:32
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию Нужна помощь с ресурсами

Здраствуйте, мне нужно запаковать dll в файл res и потом в программе чтобы при нажатии на баттон программа искала определенный exe файл можно через реестр (только я незнаю как) и копировала туда где лежит exe файл. Если это возможно напиши плз!
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #2  
Старый 08.12.2010, 19:58
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

народ очень нужно(
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #3  
Старый 08.12.2010, 20:21
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А попонятнее объяснить?
Лично я нифига не понял.
Ответить с цитированием
  #4  
Старый 09.12.2010, 12:13
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
А попонятнее объяснить?
Лично я нифига не понял.
Вообщем есть файл dll(кряк для игры) я хочу его запаковать в файл .Res (Это можно! Когда запаковывал музыку в res тока не помню как!) потом при нажатии на кнопку в программе из файла res этот dll распаковывался в папку с файлом например program.exe (но надо его найти!) вот как запаковать dll и найти где лежит файл programm.exe и распаковать рядом с ним. Надеюсь понятно!
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #5  
Старый 09.12.2010, 16:53
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Создаешь файл, например dll.rc. В него пишешь:
Код:
DLL RCDATA "<путь к длл>"

Далее компилим ресурс при помощи brcc32.exe. Запускаем brcc32.exe через консоль с параметром путь к dll.rc.
Всё. На выходе получим dll.res. Который добавляем проект
Код:
{$R dll.res}

А это ф-ия извлечения длл. Можешь задать так чтоб пользователь сам задавал путь к игре. В path должен быть путь вместе с именем длл.
Код:
var
  hRes, hMod, hFile, dwSize, n: dword;
  pBuffer: pointer;
  path: array[0..255] of char;

begin

  hMod := FindResource(HInstance, 'DLL', RT_RCDATA);
  if (hMod <> 0) then
  begin
    dwSize := SizeofResource(HInstance, hMod);
    hRes := LoadResource(HInstance, hMod);
    if (hRes <> 0) then
    begin
      pBuffer := LockResource(hRes);
      if (pBuffer <> nil) then
      begin
        hFile := CreateFile(path, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, 0, 0);
        if (hFile <> INVALID_HANDLE_VALUE) then
        begin
          SetFilePointer(hFile, 0, nil, FILE_BEGIN);
          if not (WriteFile(hFile, pBuffer^, dwSize, n, 0)) then
            MessageBox(0, 'Can''t write to file', 'Error', 16)
          else
            if (dwSize <> n) then
              MessageBox(0, 'Not all bytes write to file', 'Error', 16)
          CloseHandle(hFile);
        end;
      end;
      FreeResource(hRes);
    end;
  end;
end.

Последний раз редактировалось BoRoV, 09.12.2010 в 22:21.
Ответить с цитированием
  #6  
Старый 09.12.2010, 21:19
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

спс=) как подключать я знаю, как создавать...забыл=) а про распаковку не знал! а как сделать чтобы программа находила файл и распаковывала именно туда!
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #7  
Старый 09.12.2010, 22:17
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Ну для поиска файлов примеров уйма в инете... погугли.
Ответить с цитированием
  #8  
Старый 10.12.2010, 13:06
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

Нашол=) попробуем сделать что ты писал!
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #9  
Старый 10.12.2010, 14:08
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

а как можно извлечь из ресурса в определенную папку?
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #10  
Старый 10.12.2010, 14:39
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Ну как-то так.
Код:
procedure DoWork();
var
  s:string;
begin
  s := Find('file.exe'); // Возвращает полный путь к файлу file.exe или ничего если не найден
  if (s <> '') then
  begin
    s := ExtractFilePath(s);
    ExtractDLLFromRes(pchar(s + 'file.dll'));
  end;
end;

procedure ExtractDLLFromRes(path: pchar);
begin
  // А это то что я тебе дал
end;
Ответить с цитированием
  #11  
Старый 10.12.2010, 16:37
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Вот решил всё вынести в отдельный модуль.

Код:
unit uExtractFileFromResources;
{

  Extracting any resources to file

  Author:  BoRoV
  Date:    10 dec 2010


  Using:
  1. Extracting from itself:
  ...
  if not ExtractResToFile(HInstance, 'BIN', RT_RCDATA, 'C:\file.bin') then
    MessageBox(0, PChar(SysErrorMessage(GetLastError())), 'Error', 16);
  ...

  2. Extracting from another module:
  ...
  hFile: DWORD;
  ...
  hFile := LoadLibrary('C:\file.exe');
  if (hFile <> 0) then
  begin
    if not ExtractResToFile(hFile, 'BIN', RT_RCDATA, 'C:\file.bin') then
      MessageBox(0, PChar(SysErrorMessage(GetLastError())), 'Error', 16);
    FreeLibrary(hFile);
  end;
  ...

}
interface

uses
  Windows;

  // Declaration
  function ExtractResToFile(hInst: DWORD; ResourceName: PChar; ResourceType: PChar; FileName: PChar): Boolean;

implementation

function ExtractResToFile(hInst: DWORD; ResourceName: PChar; ResourceType: PChar; FileName: PChar): Boolean;
var
  hRes, hMod, hFile, dwSize, n: DWORD;
  pBuffer: Pointer;
begin
  Result := False;

  hMod := FindResource(hInst, ResourceName, ResourceType);
  if (hMod <> 0) then
  begin
    dwSize := SizeofResource(hInst, hMod);
    hRes := LoadResource(hInst, hMod);
    if (hRes <> 0) then
    begin
      pBuffer := LockResource(hRes);
      if (pBuffer <> nil) then
      begin
        hFile := CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0);
        if (hFile <> INVALID_HANDLE_VALUE) then
        begin
          SetFilePointer(hFile, 0, nil, FILE_BEGIN);
          if WriteFile(hFile, pBuffer^, dwSize, n, nil) then
            if (dwSize = n) then
              Result := True;
          CloseHandle(hFile);
        end;
      end;
      FreeResource(hRes);
    end;
  end;
end;

end.
Ответить с цитированием
  #12  
Старый 10.12.2010, 18:24
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

Чет ошибку пишет! Мож исходник кинуть...умоляю!
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:24.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025