2016-10-02 2 views
0

Код в C#: address = glowObject + (glowIndex * 0x38) + 0x4; код в VB: адрес = glowObject + (glowIndex * & H38) + & H4Успешная арифметическая операция в C# - Исключение исключений в VB

Я вставляю контрольную точку на этой линии в обоих моих C# код и VB кода. Значения были одинаковыми в обоих. C#: Breakpoint: C# Breakpoint В.Б. Breakpoint: VB Breakpoint Так выглядит мой VB код получает результат, но он по-прежнему бросает исключение на этой строке кода. Exception Что может быть причиной этого?

+1

Это полностью дизайн, он сделал как говорится в исключении. Трудно догадаться, как это выражение может быть правильным, * glowIndex * выглядит слишком большим. В случайном порядке вы можете использовать CLng (адрес), чтобы обеспечить добавление, использующее 64-битную математику. –

+0

Пробовал преобразовать его в длинный/установить тип переменной на длинный, а также бросать то же исключение:/ –

+0

Yay, больше CS hacks! –

ответ

0

Нашел решение :) Было так же просто, как установить флажок в параметрах компилятора. Спасибо Томас Левескё рассказал мне о compiler option. Solution Перейдите на вкладку компиляции в настройках проекта, нажмите на Дополнительные параметры компилятора, и установите флажок «Удалить целые проверки переполнения»

4

В C# арифметические операции по умолчанию не отмечены, что означает, что арифметическое переполнение не проверяется во время выполнения. Вы можете управлять этим с помощью checked/unchecked keywords, and/or with the /checked compiler option.

В VB.NET арифметические операции проверяются по умолчанию.

В вашем коде результат превышает значение int; в C# он переполняется беззвучно, создавая неверный результат, тогда как в VB.NET он генерирует исключение. В любом случае ваш код имеет ошибку ...

+0

Ну, это не исправляемая ошибка. Он читает память с адреса в игре, и я не контролирую эти значения, поэтому я предполагаю, что единственный способ исправить это - сделать его непроверенным в vb? –

+0

@JustinG, код C# переполняет и присваивает отрицательное значение 'address'. Вы говорите, что он успешно обращается к памяти с отрицательным адресом ?! –

+0

Видимо. Я не уверен, он работает безупречно. Он успешно записывает память на этот адрес. Не адрес 200033024? –