Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
7-31555
Zhenya
2003-04-26 20:10
2003.07.10
CD-ROM?


6-31391
Kremen
2003-05-03 12:59
2003.07.10
Ошибка при использовании снифера


14-31509
race1
2003-06-22 10:27
2003.07.10
winx[ <-> win98


14-31434
HermitAlex
2003-06-20 21:11
2003.07.10
Как реализовать автоматическое обновление клиентов?


1-31301
Sergei Nevazhnyi
2003-06-25 18:03
2003.07.10
Работа с canvas в D7




   Наверх