Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

CreateFileMapping(....) весь текст   Найти похожие ветки 

 
SerVel ©   (2003-05-07 13:51) [0]

Добрый день уважаемые мастера!
Проблема следующая....(С++)

//---------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <conio.h>

//---------------------------------------------------------------
char lpMsgBuf[900];
int main(int argc, char* argv[])
{ SECURITY_ATTRIBUTES g;
InitializeSecurityDescriptor(&g,SECURITY_DESCRIPTOR_REVISION);
HANDLE FD=CreateFile("c:\\aaa.txt",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,&g,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
HANDLE FM=CreateFileMapping(FD,NULL,PAGE_READWRITE,0,0,"ASD");
LPWSTR q=(LPWSTR)MapViewOfFile(FM,FILE_MAP_ALL_ACCESS,0,0,0);
//---------------------------------------------------------------
printf("\n%s",q);
//---------------------------------------------------------------
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Display the string.
MessageBox( NULL,(LPTSTR) lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
//---------------------------------------------------------------
if(INVALID_HANDLE_VALUE==FD)
printf("\nERROR");
// Free the buffer.
LocalFree( lpMsgBuf );

fflush(stdin);
getch();
return 0;
}

Тут все Ok, а когда открываю это-же отображение фаила кодом (в другои проге)

//---------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------int main(int argc, char* argv[])
{
HANDLE q=OpenFileMapping(PAGE_READWRITE,1,"ASD");
//-----------------------------------------------------------
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Display the string.
MessageBox( NULL,(LPTSTR) lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
fflush(stdin);
getch();
//--------------------------------------------------------------
LPWSTR t=(LPWSTR)MapViewOfFile(q,FILE_MAP_ALL_ACCESS,0,0,0);
//---------------------------------------------------------------
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Display the string.
MessageBox( NULL,(LPTSTR) lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
//---------------------------------------------------------------
fflush(stdin);
getch();
return 0;
}
//---------------------------------------------------------------

получаю следующее сообщение :

The specified procedure could not be found

а нужно

The operation completed successfully.

Help pls.

Спасибо заранее!!!


 
MBo ©   (2003-05-07 13:58) [1]

зачем жирным-то???

создаешь FILE_SHARE_READ
а потом открываешь
PAGE_READWRITE



 
SerVel ©   (2003-05-07 19:26) [2]

Так оно и есть... :(


 
Мда..   (2003-05-07 22:24) [3]


> MBo © (07.05.03 13:58)
> зачем жирным-то???

Потому что Си


 
Мда..   (2003-05-07 22:26) [4]

:-)


 
Verg ©   (2003-05-08 14:42) [5]

Не занаю пригодится - нет :

type
TMemFile = record
HFile, HMap : THandle;
Size : DWORD;
BaseAddress : pointer;
end;

procedure AllocMemFile(const F : string;var MemFile : TMemFile);
begin
FillChar(MemFile, sizeof(MemFile),0);
with MemFile do
begin
HFile:=CreateFile(pchar(F), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0,0);
if HFile<>INVALID_HANDLE_VALUE then
begin
Size:=GetFileSize(HFile, nil);
HMap:=CreateFileMapping(HFile, nil, PAGE_READONLY,0,0,nil);
if (HMap<>0) and (Size<>$FFFFFFFF) then
begin
BaseAddress:=MapViewOfFile(HMap,FILE_MAP_READ,0,0,0);
if BaseAddress=nil then
begin
CloseHandle(HMap);
CloseHandle(HFile);
HFile:=INVALID_HANDLE_VALUE;
HMap:=0;
end;
end else
begin
CloseHandle(HFile);
HFile:=INVALID_HANDLE_VALUE;
end;
end;
end;
end;

procedure FreeMemFile(var MemFile : TMemFile);
begin
with MemFile do
if (HFile<>INVALID_HANDLE_VALUE) and (BaseAddress<>nil) and (HMap<>0) then
begin
UnmapViewOfFile(BaseAddress);
CloseHandle(HMap);
CloseHandle(HFile);
FillChar(MemFile, sizeof(MemFile),0);
HFile:=INVALID_HANDLE_VALUE;
end;
end;




Страницы: 1 вся ветка

Текущий архив: 2003.07.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-31171
sandrina
2003-06-24 07:51
2003.07.10
Дата


1-31225
softmaster
2003-06-28 21:41
2003.07.10
POPUP menu


14-31443
Malder
2003-06-21 21:57
2003.07.10
Посоветуйте короткие фантастические рассказы


1-31246
shark
2003-06-29 18:56
2003.07.10
Файлы


3-31158
tramp
2003-06-18 13:31
2003.07.10
Проблема с указанием параметров при вызове ТBathMove...