Форум: "WinAPI";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c