为什么我可以在需要 Long 类型的参数时传递 Integer?

Why can I pass an Integer when a param of type Long is expected?

我有一个围绕本机代码 dll 的适配器 class。那个是用 x64 构建的——整数是 8 个字节。我使用以下签名:

Private Declare Sub RoutineName64 Lib "MyDll" Alias "_RoutineAlias" (param1 As Long, ... )

令我惊讶的是,我仍然可以将整数作为参数 1 传递,没有任何问题,无论是编译时还是运行时。我不知道该如何解释?

我认为执行 Dim variableLong = Convert.ToInt64(variable) 然后使用该变量调用 RoutineName64 作为 param1 是强制性的吗?

参见Widening and Narrowing Conversions