Доброго всем времени суток.
В универе по учебе есть у мну предмет "Операционные Системы", и надо по нему проги на ВинАПИ писать, но мне и еще 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/
Заранее всем спасибо, очень надеюсь на помощь. |