从 .Net 传递到 COM 时,RCW 不转换整数

RCW does not convert integer when passing from .Net to COM

根据MSDN,关于 .Net 客户端到非托管对象之间 RCW 完成的类型转换,它是这样写的:

...Other types require no conversion. For instance, a standard wrapper will always pass a 4-byte integer between managed and unmanaged code without converting the type.

据我所知,

因此,如果 Int32 作为参数从 .Net 传递到 VBA 方法并且 RCW 没有进行任何转换,那么如何传递参数?

重要的是如何在本机或托管代码端定义两个世界(非托管与托管)之间的转换。

如果转换是使用 COM / 自动化类型库(例如在 DLL 或 TLB 中)定义的,那么它将自动声明为相应的类型,尤其是对于非常知名的类型,例如无符号 16 位整数类型。

因此,VBA 16 位类型将被声明为等效的(如果它是标准的知名类型).NET 16 字节。例如,VBA integer 将被声明为 .NET 的 Int16(类似于 C# 中的 short 关键字)。

如果手动定义转换,例如使用 .NET interface 和 COM 注释,那么开发人员的任务是确保声明对双方一致(或者 problems/bugs/crashes 可能发生)。

我建议官方文档中的两个链接:Default Marshaling Behavior and Blittable and Non-Blittable Types 以确定哪些可以被视为标准类型或众所周知的类型。