Я пишу код на Go, чтобы вызвать некоторые из доверенных файлов Windows и crypt для проверки подписей файлов.В wincrypt.h есть много констант, которые я пытался портировать через дословно, но я столкнулся с некоторыми проблемами с целочисленным переполнением.
Например, все коды ошибок, которые могут быть возвращены из WinVerifyTrust, являются отрицательными значениями,Если я возьму один пример, TRUST_E_NOSIGNATURE , это будет определено в winerror.h как: #define TRUST_E_NOSIGNATURE _HRESULT_TYPEDEF_(0x800B0100L)
.В моем коде Go у меня есть const TRUST_E_NOSIGNATURE = int32(0x800B0100)
, но при компиляции ошибка:
константа 2148204800 переполняется int32
, когда я действительно ожидал, что значение будет -2146762496
Итак, мои вопросы 1) почему он не переносится, как в других языках 2) В любом случае, чтобы константа все еще использовала шестнадцатеричное представлениеномер или мне придется изменить код на const TRUST_E_NOSIGNATURE = int32(-2146762496)
, который работает нормально, но потребует от меня внесения этого изменения во многие другие перенесенные мной константы?