VB6 和 VB.NET 中短值的不同处理方式?

Different handling of Short values in VB6 and VB.NET?

我最近正在将一些 VB6 代码升级到 VB.NET。出现的一个奇怪问题是 short 数据类型的差异。

原来的VB6代码有如下一行:

foobar(&H8589)

其中 foobar 是一个接受一个 short 参数的函数。上面的代码在 VB6 中运行良好。目的是将两个字节传递给此函数,short 似乎是合适的数据类型,因为它代表 2 个字节。

升级后,代码突然returns错误Constant value not representable in type 'Short'.所以我在MSDN, where it says:

中了解了这种数据类型

Holds signed 16-bit (2-byte) integers that range in value from -32,768 through 32,767.

所以让我们将 0x8589 转换为 DEC。显示为 -31,351,完全在类型设置的边界内。现在,奇怪的是:当我使用 DEC 值 (foobar(-31351)) 调用函数时 - 它起作用了!

所以你可能会问为什么我不直接使用 DEC 值。好吧,使用 HEX 的好处是每个查看代码的人都会立即知道传递了哪些字节,这在这种情况下很重要。

那么:为什么我不能使用 HEX 表示法?这种差异是否记录在某处?有没有一种方法可以在不更改函数的情况下使用 HEX 代码(例如接受两个 Byte 参数)?

要使用负十六进制 int16 常量,请在值前面加上 FFFF。在 vb.net.

中,十六进制常量似乎是 int32(至少)
  dim w as int16
  w = &HFFFF8589