Чувствам се смешно с моя C++ управляван код с visual 2008. Сигурен съм, че има проста причина това да се случи, но просто ми липсва и ставам малко разочарован тук.
Проблемът: Използвам XOR, за да оценя контролна сума на предадено изречение. Е, работи безупречно при отстраняване на грешки и ако стартирам от визуална версия като версия, но когато създам инсталатора и инсталирам версията, в една и съща машина, XOR се държи напълно различно, давайки ми различни стойности. т.е. при отстраняване на грешки ми дава 44, а в инсталирана версия ми дава 79E721FC.
Кодът:
{
String^ OrigChecksum=mysentence->Substring(mysentence->IndexOf('*')+1);
if(mysentence->StartsWith("!"))
{
mysentence=mysentence->Substring(mysentence->IndexOf('!')+1,mysentence->IndexOf('*')-mysentence->IndexOf('!')-1);
}
else if(mysentence->StartsWith("$"))
{
mysentence=mysentence->Substring(mysentence->IndexOf('$')+1,mysentence->IndexOf('*')-mysentence->IndexOf('$')-1);
}
int checksum;
if(mysentence->Length>1)
{
for(int i=0;i<mysentence->Length;i++)
{
try
{
checksum ^= Convert::ToByte(mysentence[i]);
//MessageBox::Show(Convert::ToByte(mysentence[i]).ToString("X2"));
}
catch(...)
{
}
}
String^ strChecksum=checksum.ToString("X2");
//MessageBox::Show(OrigChecksum+","+strChecksum+","+checksum);
if(OrigChecksum==strChecksum)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
Обърнете внимание на MessageBox, който използвам, за да видя стойностите, когато съм инсталиран, тъй като не мога да използвам програмата за отстраняване на грешки там и когато отстранявам грешки във Visual Studio, всичко е перфектно... Опитах друг подход със същите резултати, както следва: използване на масив от char array^ символ=моетоизречение->ToCharArray(); и използване на оператора ^ вместо контролна сума=контролна сума ^ int(символ[номер])
Някой имал ли е подобен опит? Моля, някакви съвети или светлина по въпроса?
Всичко най-добро Адам