![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Здраствуйте, мне нужно запаковать dll в файл res и потом в программе чтобы при нажатии на баттон программа искала определенный exe файл можно через реестр (только я незнаю как) и копировала туда где лежит exe файл. Если это возможно напиши плз!
Начинающий Delphi Помогаю за Спасибо! ![]() |
#2
|
||||
|
||||
![]() народ очень нужно(
Начинающий Delphi Помогаю за Спасибо! ![]() |
#3
|
|||
|
|||
![]() А попонятнее объяснить?
Лично я нифига не понял. |
#4
|
||||
|
||||
![]() Цитата:
![]() Начинающий Delphi Помогаю за Спасибо! ![]() |
#5
|
||||
|
||||
![]() Создаешь файл, например 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
|
||||
|
||||
![]() спс=) как подключать я знаю, как создавать...забыл=) а про распаковку не знал! а как сделать чтобы программа находила файл и распаковывала именно туда!
Начинающий Delphi Помогаю за Спасибо! ![]() |
#7
|
||||
|
||||
![]() Ну для поиска файлов примеров уйма в инете... погугли.
|
#8
|
||||
|
||||
![]() Нашол=) попробуем сделать что ты писал!
Начинающий Delphi Помогаю за Спасибо! ![]() |
#9
|
||||
|
||||
![]() а как можно извлечь из ресурса в определенную папку?
Начинающий Delphi Помогаю за Спасибо! ![]() |
#10
|
||||
|
||||
![]() Ну как-то так.
Код:
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
|
||||
|
||||
![]() Вот решил всё вынести в отдельный модуль.
Код:
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
|
||||
|
||||
![]() Чет ошибку пишет! Мож исходник кинуть...умоляю!
Начинающий Delphi Помогаю за Спасибо! ![]() |