Посл.ответ |
Сообщение |
Ранг: 81.2 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 27 августа 2007 00:22 · Личное сообщение · #1
ситуация такая:
я делаю так
res:=FindResource// каких-то ресурсов
res:=LoadResource// каких-то ресурсов
flock:=LockResource// в переменную flock
затем
fl:=_lcreat(pchar(...),0)
_lwrite(fl,flock,sizeofresource(hinstance,res))
_lclose(fl)
FreeResource(res)// каких-то ресурсов
вся эта радость валит в цикле
(может быть необходима обработка нескольких файлов)
но создаётся только пустое файло, подскажите в чём я не прав
зы - со stream-АМИ нельзя (API прилога)
| Сообщение посчитали полезным: |
|
Ранг: 81.2 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 27 августа 2007 00:23 · Личное сообщение · #2
+
var
res,fl:cardinal;
flock:pointer //или pchar
| Сообщение посчитали полезным: |
Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 27 августа 2007 00:25 · Поправил: Hellspawn · Личное сообщение · #3
странный у тя код =\ заюзай эту функу, косяков не замечал...
function ResourceToFile(ResName,ResType,FileName:PChar):Integer;
var
RMemory : pointer;
HGlobal : dword;
HResInfo: dword;
FSize,FHandle,Buf,Fm:dword;
MEMPTR : pointer;
begin
Buf:=0;
result:=0;
HResInfo:=FindResource(HInstance,ResName,ResType);
If (HResInfo = 0) then exit;
HGlobal:=LoadResource(HInstance,HResInfo);
RMemory:=LockResource(HGlobal);
FSize:=SizeOfResource(HInstance,HResInfo);
FHandle:=CreateFile(FileName,GENERIC_READ or GENERIC_WRITE,0,nil,CREATE_ALWAYS,$00000006,0);
WriteFile(FHandle,RMemory^,FSize,Buf,nil);
Fm:=CreateFileMapping(FHandle,nil,4,0,FSize, nil);
MEMPTR:=MapViewOfFile(FM,2,0,0,FSize);
бла бла бла...
UnmapViewOfFile(MEMPTR);
CloseHandle(FM);
CloseHandle(FHandle);
Result:=Buf;
end;
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 117.1 (ветеран) Активность: 0.05↘0 Статус: Участник
|
Создано: 27 августа 2007 05:58 · Поправил: pushick · Личное сообщение · #4
LockResource является анахронизмом и совершенно не нужен. Вот простой и эффективный способ извлечения ресурсов из приложения. Мапить файл тоже совершенно не нужно.
function ExtractResource(const ResName: PWideChar; const ResSection: PWideChar; const ExtractFileName: PWideChar): boolean;
var
hRes: HRSRC;
hResData: HGLOBAL;
p1: pointer;
size: cardinal;
f: THANDLE;
bytesIO: DWORD;
begin
result := false;
hRes := FindResourceW(hinst, ResName, ResSection);
if (hRes = 0) then exit;
size := SizeOfResource(hinst, hRes);
if (size = 0) then exit;
hResData := LoadResource(hinst, hRes);
if (hResData = 0) then exit;
p1 := pointer(hResData);
bytesIO := 0;
f := CreateFileW(ExtractFileName, GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN, 0);
if (f <> INVALID_HANDLE_VALUE) then
begin
_WriteFile(f, p1, size, @bytesIO, nil);
CloseHandle(f);
end;
result := (bytesIO = size);
end;
----- Security through obscurity is just an illusion | Сообщение посчитали полезным: |
Ранг: 81.2 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 27 августа 2007 06:52 · Личное сообщение · #5
спасибо, кстати я почти так и делал,
ща попробую иторой вариант.
вот блин как бывает в спешке свой код не доработал,
и начал переходить на другие варинты.
ещё раз спасибо
| Сообщение посчитали полезным: |
Ранг: 81.2 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 27 августа 2007 07:28 · Личное сообщение · #6
pushick:
по поводу
_WriteFile(f, p1, size, @bytesIO, nil);
ты наверное хотел написать
WriteFile(f, p1, size, @bytesIO, nil);
И что странно в хелпе пишет что 4 параметр должен быть указателем
а дельфа просит просто cardinal, или это уже различия версий, у меня например
сейчас 6.
| Сообщение посчитали полезным: |
Ранг: 81.2 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 27 августа 2007 07:30 · Личное сообщение · #7
сейчас попробую вариант от Hellspawn
просто предыдущий был очень на мой похож
я его и перепробовал.
| Сообщение посчитали полезным: |
Ранг: 117.1 (ветеран) Активность: 0.05↘0 Статус: Участник
|
Создано: 27 августа 2007 08:11 · Личное сообщение · #8
NicknamES
Просто аффтары из борланд описали этот параметр как var. У меня свой windows.pas и там все поправлено на то, как это должно быть.
----- Security through obscurity is just an illusion | Сообщение посчитали полезным: |
Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 27 августа 2007 12:06 · Личное сообщение · #9
pushick пишет:
LockResource является анахронизмом и совершенно не нужен
нужен не нужен хз))) я делал по мануалу функа пашет 100% по-этому оставлю так
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 81.2 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 27 августа 2007 12:48 · Личное сообщение · #10
Эх ёпт , короче ppls
у меня всё работало,просто фишка была в том,
что файлы которые создавал мой код, были с
атрибутами faHIDDEN или faSYSTEM, а по моим
системным настройкам эти файлы не должны быть видны
,а я думал что они не создаются, а мучался несколько дней.
вот блин как обидно, спасибо что отозвались!!!
| Сообщение посчитали полезным: |