Похожие презентации:
Marshal Class
1.
— Так, — сказал Экселенц. — Теперь следующее.Он полез в боковой ящик стола, где всякий нормальный
сотрудник держит справочную кристаллотеку, и извлек оттуда
некий громоздкий предмет, название которого я поначалу
вспомнил на хонтийском: "заккурапия", что в точном переводе
означает — "вместилище документов". И только когда он
водрузил это вместилище на стол перед собой и сложил на нем
длинные узловатые пальцы, у меня вырвалось:
— Папка для бумаг!
Братья Стругацкие "Жук в муравейнике".
2.
3.
4.
Marshal ClassПредоставляет набор методов для выделения
неуправляемой памяти, копирования неуправляемых
блоков памяти и преобразования управляемого типа в
неуправляемый, а также прочие методы, используемые
при взаимодействии с неуправляемым кодом.
System.Runtime.InteropServices.Marshal
5.
Copy (IntPtr, Byte [] , Int32, Int32)Копирует данные из неуправляемого участка памяти,
первый байт которого задан указателем в управляемый
одномерный массив 8-разрядных целых чисел без знака.
public static void Copy(
IntPtr source,
// источник
byte[] destination, // приемник
int startIndex,
// номер первого копируемого байта
int length
// количество байт
)
6.
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
namespace FileMngm
{
class CFileMngm
{
public unsafe struct TbCars
{
public fixed char Mark[30];
public double V;
public int S;
}
7.
public unsafe void Convert(string _fn){
int i, Res;
string tmp;
TbCars* bCars = stackalloc TbCars[1];
byte[] bbCars = new byte[sizeof(TbCars)];
string bCarsTXT;
System.IO.StreamReader fCatsTXT =
new System.IO.StreamReader(_fn);
tmp = "";
for (i = 0; i <= _fn.IndexOf("."); i++)
tmp = tmp + _fn[i];
tmp = tmp + "dat";
FileStream fCars = File.OpenWrite(tmp);
8.
while ((bCarsTXT = fCatsTXT.ReadLine()) != null){
for (i = 0; i < 30; i++)
bCars->Mark[i] = ' ';
tmp = "";
for (i = 0; i < bCarsTXT.IndexOf("/"); i++)
bCars->Mark[i] = bCarsTXT[i];
9.
i = i + 1;while (bCarsTXT[i] != '/')
{
tmp = tmp + bCarsTXT[i];
i++;
}
if (Double.TryParse(tmp, out bCars->V))
{
tmp = "";
for (i = i + 1; i < bCarsTXT.Length; i++)
tmp = tmp + bCarsTXT[i];
if (Int32.TryParse(tmp, out bCars->S))
Res = 0;
else
Res = 2;
}
else
Res = 1;
10.
elseRes = 1;
} //then
else
Res = 3;
Marshal.Copy((IntPtr)bCars, bbCars, 0, bbCars.Length);
fCars.Write(bbCars, 0, bbCars.Length);
}
fCars.Close();
}
}
}
11.
class CFileMngm{
public struct TbCars
{
public fixed char Mark[30];
public double V;
public int S;
}
string bCarsTXT;
public void StrToRec()
{
for (i = 0; i < 30; i++)
bCars->Mark[i] = ' ';
tmp = "";
for (i = 0; i < bCarsTXT.IndexOf("/"); i++)
bCars->Mark[i] = bCarsTXT[i];
tmp="";
12.
rCar=bCarsTXT.Split(new Char[] {'/'});if (rCar.Length == 3)
{
for (i = 0; i < 30; i++)
bCars->Mark[i] = 32;
for (i = 0; i < rCar[0].Length; i++)
bCars->Mark[i] =
System.Convert.ToByte(rCar[0][i]);
if (Double.TryParse(rCar[1], out bCars->V))
{
if (Int32.TryParse(rCar[2], out bCars->S))
Res = 0;
else
Res = 2;
}
13.
string[] rCar;public void StrToRec()
{
rCar=bCarsTXT.Split(new Char[] {'/'});
if (rCar.Length == 3)
{
for (i = 0; i < 30; i++)
bCars->Mark[i] = 32;
for (i = 0; i < rCar[0].Length; i++)
bCars->Mark[i] =
System.Convert.ToByte(rCar[0][i]);
14.
if (Double.TryParse(rCar[1], out bCars->V)){
if (Int32.TryParse(rCar[2], out bCars->S))
Res = 0;
else
Res = 2;
}
else
Res = 1;
}
else
Res = 3;
}
Программное обеспечение