VC ++ Длинное значение без знака изменилось на отрицательное число, что переходило к процедуре oracle - PullRequest
0 голосов
/ 16 марта 2020

Я использую тип данных C ++ Unsigned Long DWORD для передачи процедуры, превышающей 2147483647, на oracle. но вставляя отрицательное число в процедуру. не знаю, почему.

Параметр процедуры определен как число.

тот же код, работающий на сервере окон 2003 года.

, но при использовании кода на сервере окон 2012 и сборке в VS2005 32-разрядный режим и разверните dll. Я сталкиваюсь с этой проблемой.

это связано с Windows, Oracle или C ++?

1 Ответ

0 голосов
/ 16 марта 2020

При передаче 32-битных параметров компилятору C ++ не важно, является ли параметр подписанным или беззнаковым, он просто помещает 32-битные в стек для их передачи. Где значения со знаком и без знака находятся в сравнениях, выполненных в коде.

Звучит так, как будто вы передаете значение без знака функции, которая ожидает значение со знаком. Ваше неподписанное значение больше 2147483647 затем интерпретируется как значение со знаком, которое ожидала функция, означающее, что оно интерпретируется как отрицательное число. Если функция, которую вы вызываете, является процедурой Oracle, то я подозреваю, что процедура определена как принятие значения со знаком.

...