根据MSDN,关于RCW在.Net客户端与非托管对象之间完成的类型的转换,它写成:
......其他类型无需转换。例如,标准包装器将始终在托管代码和非托管代码之间传递4字节整数,而不转换类型。
AFAIK,
因此,如果Int32作为参数从.Net传递到VBA方法并且RCW没有完成转换,那么参数如何传递?
答案 0 :(得分:1)
重要的是如何在本机或托管代码端的两个世界(非托管与托管)之间定义转换。
如果使用COM /自动化类型库(例如在DLL或TLB中)定义转换,则它将自动声明为相应的类型,尤其是对于非常有名的类型,例如无符号的16位整数类型。
因此,VBA 16位类型将被声明为等效的(如果它是标准的已知类型).NET 16字节。例如,VBA integer
将被声明为.NET Int16
(与C#中的short
关键字一样)。
如果手动定义转换,例如使用带有COM注释的.NET interface
,那么它是开发人员的任务,以确保声明对双方都是一致的(或者问题/错误) /可能发生崩溃。)
我建议官方文档中有两个链接:Default Marshaling Behavior和Blittable and Non-Blittable Types,以确定可以被视为标准或众所周知的类型。