VBA Object对象的函数参数传递
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA Object对象的函数参数传递相关的知识,希望对你有一定的参考价值。
参考技术AVBA的函数参数传递方式是 Byval和Byref ,数值类型、Stirng等那些值类型的是要非常注意用哪种方式的。对于Object对象引用类型的一直都说2种方式完全没有区别。
Object对象的Byval和Byref参数真的没有区别吗?
对于操作的这个Object对象来说,可以认为是没有区别,但是传递过程和其他数据类型的参数传递是一样的,遵守的规则并没有改变。
对于Object对象,其实我们传递的只是 他的指针 ,也就是VarPtr得到的那个数字,是指向Object所在内存的地址。
可以理解为参数其实就是一个LongPtr类型,所以你是复制一份这个LongPtr类型的数字传递,还是把这个LongPtr类型所在的内存地址传递给函数,对于Object这个对象来说,是没有区别的。它最终都要通过这个数字所代表的内存地址找到Object对象。
从打印输出可以看出,Byval传递需要复制参数,其实只是把保存对象地址的那个内存地址,也就是VarPtr得到的那个地址复制改变了,而这个地址中保存的数据仍然是ObjPtr的那个地址。
测试传递给动作脚本函数的参数的对象类型?
【中文标题】测试传递给动作脚本函数的参数的对象类型?【英文标题】:Testing the object type of a parameter passed into a actionscript function? 【发布时间】:2019-11-19 03:15:17 【问题描述】:如何检查传递给函数的Object
是否是您所期望的?
public function writeRecord(grid:IExtendedDataGrid, record:Object):String
ExternalInferface.call("alert","record " + record);
if (record.contains("HotListItem")
//# I have found my object
else
//# Wrong type of object
当我将对象显示到 ExternalInterface alert
调用时,它会显示以下内容...
记录 [object HotListItem]
我希望能够事先测试这种类型的对象。
【问题讨论】:
HotListItem
这个词从何而来?我的意思是alert()
是如何知道显示关于record
的特定文本的?知道这个问题的答案也会给你一个问题的答案......
使用 is 运算符如下:if (record is HotListItem).
感谢 Organis。 HotListItem 是一个自定义类。我尝试了“record instanceof HotListItem”并且它有效,但说它已被弃用并提示我改用“is”。
【参考方案1】:
使用 is 运算符解决了我的问题。 我尝试了 instanceof 运算符,但这被标记为已弃用。
感谢Organis
if (record is HotListItem)
【讨论】:
以上是关于VBA Object对象的函数参数传递的主要内容,如果未能解决你的问题,请参考以下文章