Главная страница
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.019 c
1-31342
sly fox
2003-06-27 12:18
2003.07.10
Люди добрые помогите с fast report?!


1-31337
Ivan Voronov
2003-06-27 12:44
2003.07.10
TShellListView и что-то подобное


1-31237
region
2003-06-29 15:34
2003.07.10
List index out of bounds ...


1-31278
denis24
2003-06-26 12:09
2003.07.10
Проверка изменения данных в эдите


14-31450
Всеволод Соловьёв
2003-06-22 22:58
2003.07.10
Мыло на мобилки