Russian Qt Forum
Ноябрь 23, 2024, 09:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: программа вылетает в break  (Прочитано 2943 раз)
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();
Записан
popper
Гость
« Ответ #1 : Март 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());
Записан
Firefox
Гость
« Ответ #2 : Март 29, 2012, 17:24 »

спасибо попробую)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 21.