Перенос кода с одного компилятора на другой…

  • Автор темы FanatWin
  • Дата начала
F

FanatWin

#1
Помогите перевести код «Visual Studio 2008 Express» на «Borland C++Builder 6».

Пожалуйста, кто нибудь помогите…я, уже буквально, выбился из сил… код вроде и простой, но я не как не догоняю (не могу найти аналоги в C++), как его перевести на «Borland C++Builder 6» оригинал написан на C# «Visual Studio 2008 Express»…

[codebox]List<Var> Variablen = new List<Var>();

public bool ReadMyFile(string p) // Здесь принимается строка с именем файла
{
Variablen.Clear(); // Вот здесь не пойму наверное это массив
if (p.Trim().Length==0||!File.Exists(p))
{
MessageBox.Show(MBFILENOTFOUND, MBTFILEERROR);
return false;
}
string Oldname = currentFileName;
this.Text = TITLE +" - "+ p.Replace(path,"");
currentFileName = p;
dialogMode = true;
dialogBegin = false;
byte[] ByteArray; //в C++есть такой массив но как он применён здесь не понятно
try
{
ByteArray = File.ReadAllBytes(p); // Заносится файл в массив
// как такое сделать на C++ знаю но можно
// просто читать файл до конца с помощью fgetc(file) по симвалам
}
catch
{
MessageBox.Show(MBFILENOTREAD, MBTFILEERROR);
return false;
}

int strlength = 0;
int position = 0;
string varname = "";
int value=0;
bool Readmode = false;
int i = 0;
int Count0A = 0;
int MaxByte = 0;
while (i < ByteArray.Length)
{

if (ByteArray==0x0A)
{
Count0A++;
if (Count0A > 6)
{
i++;
}
}
if (ByteArray == 0x02
&& ByteArray[i+1] == 0x00
&& ByteArray[i+2] == 0x00
&& ByteArray[i+3] == 0x00
&& ByteArray[i+4] == 0x01
&& ByteArray[i+5] == 0x00
&& ByteArray[i+6] == 0x00
&& ByteArray[i+7] == 0x00)
{
break;
}
i++;
}

i += 8;
MaxByte = BitConverter.ToInt32(ByteArray, i);
i += 3;

while (i < MaxByte)
{

try
{

if (ByteArray == 0x12)
{

if (dialogMode)
{
value = JumpNr(ref ByteArray, ref i, ref position);

}
else
{

if (Readmode == true && varname.Trim().Length > 0)
{

value = JumpNr(ref ByteArray, ref i, ref position);

if (dialogEnd)
{
dialogEnd = false;
}
else
{

Variablen.Add(new Var(varname, value, position));
}
i--;
Readmode = false;

}
}
}
else if (ByteArray== 0x01)
{
strlength=ReadLength(ref ByteArray, ref i);
if (strlength >0)
{
varname = ReadName(ref ByteArray, ref i, strlength);
}




if (varname.Trim().Length > 0)
{
if (dialogMode && dialogBegin)
{

Variablen.Add(new Var(varname, value, position));
}
else
{
Readmode = true;
}

}

}


}
catch
{
break;

}
i++;
}
Variablen.Sort();
if (Variablen.Count == 0)
{
MessageBox.Show(MBFILENOTREAD, MBTFILEERROR);
currentFileName = Oldname;
this.Text = TITLE + " - " + currentFileName.Replace(path, "");
return false;
}
return true;
}


Вспомогательные функции…

public string ReadName(ref byte[] b, ref int z, int l)
{
StringBuilder r = new StringBuilder(2048);
string s;
int i;
for ( i = z; i < z+l; i++)
{
r.Append((char)(b));

}
s = r.ToString();

z += s.Length-1;

if (tagebuchmode && s==("[]"))
{
tagebuchmode = false;
return "";
}
if (tagebuchmode)
{
return "";
}
return s;
}

public int JumpNr(ref byte[] b,ref int z, ref int k)
{
int d2 = 0;
int r = 0;
while (b[z]==0x12)
{
z +=5;
if (b[z] != 0x01)
{

if (dialogBegin && b[z] == 0x02)
{
tagebuchmode = true;
dialogMode = false;
dialogEnd = true;
dialogBegin = false;
}
z++;
k = z;
if (dialogBegin == false && d2 < 2)
{
r = BitConverter.ToInt32(b, z);
d2++;
}
z += 4;
if (b[z - 5] != 2)
{
}
if (dialogMode && b[z-5] == 0x06)
{
dialogBegin = true;
return r;
}
}


}
return r;
}

public int ReadLength(ref byte[] b, ref int z)
{
int r = 0;
z += 1;
r = BitConverter.ToInt16(b, z);
z += 2;
return r;
}[/codebox]

Вспомогательные не так важны, я просто их привел, чтоб понятно было… мне б с первой разобраться, а остальное я сам сделаю.

Да, боже мой, чуть не забыл, пояснить, что это всё значит.
В первую функцию передаётся имя файла, … и она его читает в бинарном режиме и находит в нём значения, которые после выводятся в «Variablen» (что-то типа структуры как я понял или массива)
(Сам файл смешанный, на половину текстовый, на половину бинарный, т.е. значения в нём даны в бинарном виде, а переменные хранящие эти значения в текстовом)

Плиз… кому не трудно помогите…

З.Ы. Модераторам, если не правильно выбрал раздел просьба не удалять, а перенести в соответствующий…