Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отображаемые на память файлы 
:(
    Опции темы
kosmonaFFFt
Дата 9.6.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Доброго всем времени суток.

В универе по учебе есть у мну предмет "Операционные Системы", и надо по нему проги на ВинАПИ писать,
но мне и еще 2 "счастливчикам" он сказал в добровольно-принудительном порядке писать на .НЕТ платформе.
И имеется сейчас задание - там надо сделать передачу данных между двумя программами с помощью
отбражаемых на память файлов.

Есть у мну пара вопросов. Итак:
1) Есть ли в C# средства для работы с отображаемыми на память файлами. (мну за пол дня ничего не нагуглил).
2) Пытаюсь пока что прикрутить ВинАПИ из ДЛЛ, наваял пока что такой код:
Код

using System;
using System.Runtime.InteropServices;
using System.IO;

namespace server
{
    class Program
    {
        [DllImport("kernel32.dll", SetLastError=true)]
        static extern IntPtr CreateFileMapping(
            IntPtr hFile
            , IntPtr lpFileMappingAttributes
            , uint flProtect
            , uint dwMaximumSizeHigh
            , uint dwMaximumSizeLow
            , [MarshalAs(UnmanagedType.LPStr)] string lpName);
        
        [DllImport("kernel32.dll", SetLastError=true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool CloseHandle(IntPtr hObject);
        
        const uint PAGE_READWRITE = 0x0004;
        
        public static void Main(string[] args)
        {
            Console.WriteLine("Введите полное имя отображаемого файла:");
            String fileName = Console.ReadLine();
            //Проверка на существование файла.
            if (File.Exists(fileName))
            {
                Console.WriteLine("Файл существует!!! Надо ввести имя несуществующего файла!!!");
                Console.Read();
                return;
            }
            //Создание отображаемого на память файла.
            FileStream fileStream = new FileStream(fileName, FileMode.CreateNew);
            //Взятие дескриптора файла.
            IntPtr fileHandle = fileStream.Handle;
            //Создание FileMapping.
            IntPtr fileMapping = CreateFileMapping(
                fileHandle
                , IntPtr.Zero
                , PAGE_READWRITE
                , 0
                , 0
                , fileName + "Mapping");
            //Проверка на ошибку создания FileMapping.
            if (fileMapping == IntPtr.Zero)
            {
                Console.WriteLine("Произошла ошибка создания FileMapping!!!");
                fileStream.Close();
                fileStream.Dispose();
                Console.Read();
                return;
            }
            //Закрытие дескриптора FileMapping.
            CloseHandle(fileHandle);
            //Закрытие файлового потока.
            fileStream.Close();
            fileStream.Dispose();
            //Удаление файла.
            File.Delete(fileName);
        }
    }
}


в итоге у меня все время fileMapping получается равен NULL, то есть не создается почему-то, поэтоиу второй вопрос - как это можно исправить?

З.Ы. По поводу прикручивания ВинАПИ функций курил материалы с http://www.pinvoke.net/

Заранее всем спасибо, очень надеюсь на помощь.


--------------------
user posted image
PM MAIL ICQ   Вверх
amarenkov
Дата 10.6.2008, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



Попробуй заместо 

Код

            //Создание отображаемого на память файла.
            FileStream fileStream = new FileStream(fileName, FileMode.CreateNew);
            //Взятие дескриптора файла.
            IntPtr fileHandle = fileStream.Handle;


использовать класс File. И передавать хэндл из этого класса. ИМХО, файловый потом немного другое. Во всяком случае, когда я делал это, с File работало smile.

Добавлено через 1 минуту и 9 секунд
Цитата(kosmonaFFFt @  9.6.2008,  17:47 Найти цитируемый пост)
1) Есть ли в C# средства для работы с отображаемыми на память файлами. (мну за пол дня ничего не нагуглил).


Нету. Надо делать, как ты делаешь - импортировать функции из dll.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.4454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.