在从VB6迁移到.NET时使用COM互操作的大型项目中,我发现需要编写从interop方法接收对象的代码,然后将该对象传递给interop形式不是空的。
我发现on MSDN空对象作为Empty变量返回。这会导致像这样的VB6代码出现问题,其中validator是interop类,而inputKey与问题无关。
Set validationObject = validator.GetValidationList(inputKey)
当变量为Empty时,不能使用Set语句。以下是该函数正在执行的操作的示例。
Dim validationList = GetValidationList(inputKey)
If validationList IsNot Nothing AndAlso validationList.Count > 0 Then
Return validationList
Else
Return Nothing
End If
是否有最佳实践可以将Null值作为VT_OBJECT变量返回给COM?以下代码是个好主意吗?它似乎有效,但它是“正确”的方式吗?
Dim validationList = GetValidationList(inputKey)
If validationList IsNot Nothing AndAlso validationList.Count > 0 Then
Return validationList
Else
Return New System.Runtime.InteropServices.UnknownWrapper(Nothing)
End If
答案 0 :(得分:1)
您发布的MSDN列表似乎也显示System.DBNull
将与VT_NULL
匹配。
System.DBNull的MSDN页面似乎进一步支持了这一点:
Additionally, COM interop uses the DBNull class to distinguish between a VT_NULL variant, which indicates a nonexistent value, and a VT_EMPTY variant, which indicates an unspecified value.