我正在编写返回对象的 COM 包装器,如果该对象不存在,则返回 null。从 VBScript 调用时,返回 null 会引发错误“所需对象:'ComObj.Prop2'”代码 800A01A8...
C#
public class testCOM
{
public object Func(int i)
{
if (i == 1) return new object();
if (i == 2) return DBNull.Value;
return null;
}
}
VBScript
set ComObj = CreateObject("ClassLibrary1.testCOM")
set TestObj = ComObj.Func(1) 'This Works
set TestObj = ComObj.Func(2) 'Throws "Object required: 'ComObj.Func(...)'" Code 800A01A8
set TestObj = ComObj.Func(3) 'Throws "Object required: 'ComObj.Func(...)'" Code 800A01A8
set TestObj = Nothing 'This is what I want to occur with Func(2) and Func(3)
我尝试返回 DBNull.Value,它应该编组为 VT_NULL,但没有运气......
我真的不想用 .HasValue 和 .Value 编写类似于 Nullabe<> 的包装器对象......我不喜欢的另一个选择是创建一个 Nothing 对象(在没有命名空间内),所以我可以这样做:
If TestObj Is Nothing And TestObj = "Nothing" Then
'TestObj was nothing or "Nothing"
End If
如果我使用 Nothing 对象,那么我的 COM 对象必须重新输入 Object 类型而不是预期的类型化对象,这使得代码更难阅读,尽管在功能上与我的目的相同。
通过 COM 将空对象返回给 VBScript 的最佳方法是什么?