Название: программа вылетает в break
Отправлено: Firefox от Март 29, 2012, 10:31
подскажите пожалуйста почему программа вылетает при записи в файл памяти. #include <QMessageBox> #include <windows.h> #include <stdio.h> #include <conio.h> #include <QString> class Mapping_file { public: Mapping_file(); ~Mapping_file(); // Идентификатор отображения файла на память HANDLE hFileMapping; // Указатель на отображенную область памяти LPVOID lpFileMap;
LPCWSTR lpFileName_in; LPCWSTR lpFileName_out; // Идентификатор отображения файла на память HANDLE hFileMapping_in; HANDLE hFileMapping_out; // Указатель на отображенную область памяти LPVOID lpFileMap_in,lpFileMap_out; void Open_mop_file(); void write_mapping(); protected: private: }; #include "Mapping_file.h"
Mapping_file::Mapping_file() { // Имя отображния файла на память lpFileName_in = L"InFileName"; lpFileName_out = L"OutFileName"; } Mapping_file::~Mapping_file() { // Отменяем отображение файла UnmapViewOfFile(lpFileMap);
// Освобождаем идентификатор созданного // объекта-отображения CloseHandle(hFileMapping);
} void Mapping_file::Open_mop_file() { lpFileName_in = L"InFileName"; // Открываем объект-отображение hFileMapping = OpenFileMapping( FILE_MAP_READ | FILE_MAP_WRITE, FALSE, lpFileName_in);
// Если открыть не удалось, выводим код ошибки if(hFileMapping == NULL) { fprintf(stdout,"OpenFileMapping: Error %ld\n", GetLastError()); getch(); return; }
// Выполняем отображение файла на память. // В переменную lpFileMap будет записан указатель на // отображаемую область памяти lpFileMap = MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0);
// Если выполнить отображение не удалось, // выводим код ошибки if(lpFileMap == 0) { fprintf(stdout,"MapViewOfFile: Error %ld\n", GetLastError()); getch(); return; } } void Mapping_file::write_mapping() { QString str="hello_cvc"; int count=0; DWORD dwLenght; while(count<str.size()) { dwLenght=str.at(count).toAscii(); *((LPDWORD)lpFileMap_in)=dwLenght; // ВЫЛЕТАЕТ ЗДЕСЬ count++; } if(count==str.size()) { count=0; } } использование Mapping_file *map; map=new Mapping_file(); map->Open_mop_file(); map->write_mapping();
Название: Re: программа вылетает в break
Отправлено: popper от Март 29, 2012, 12:55
void Mapping_file::write_mapping() { QString str="hello_cvc"; int count=0; DWORD dwLenght; while(count<str.size()) { dwLenght=str.at(count).toAscii(); *((LPDWORD)lpFileMap_in)=dwLenght; // ВЫЛЕТАЕТ ЗДЕСЬ count++; } if(count==str.size()) { count=0; } } используй CopyMemory(lpFileMap, str.toAscii().constData(), str.size());
Название: Re: программа вылетает в break
Отправлено: Firefox от Март 29, 2012, 17:24
спасибо попробую)
|