如何在VB6中检查COM对象的属性是否为null值?

时间:2014-01-03 11:18:51

标签: com vb6

我正在研究VB6遗留应用程序的扩展。

我们在C#中开发了一个扩展,它通过COM暴露给VB6。 C#解决方案中的一个方法返回一个具有多个属性的对象,其中一些属性本身就是项目中定义的类的实例(不是实际的片段;不幸的是我不允许发布原始代码):

public class CustomType
{
   ...
}

public class ComAdapter
{
  public CustomType ExampleProperty 
  { 
    get { ... } // edited: this was not an auto-property and causing an exception
  }

  ... (more properties and some logic)
}

在Vb6中,我们收到一个ComAdapter类的实例。在某些情况下,属性Instance可以为null - 这是预期的。这应该会在旧版应用中触发不同的行为。问题是:如何检查ExampleProperty属性是否为null?

我尝试了以下所有方法:

Dim oAdapter as ComAdapter
... (code to retrieve instance ComAdapter)

If oAdapter.ExampleProperty Is Nothing Then (...)
If oAdapter.ExampleProperty Is Null Then (...)
If oAdapter.ExampleProperty Is Empty Then (...)
If IsNothing(oAdapter.ExampleProperty) Then (...)
If IsNull(oAdapter.ExampleProperty) Then (...)
If IsEmpty(oAdapter.ExampleProperty) Then (...)

一切都失败了。在所有情况下,我都得到“对象引用未设置为对象的实例”。我猜这与我试图检查房产的事实有关,但我不知道如何解决它。

编辑:我检查了oAdapter是否设置正确。除了我试图检查哪些实际可访问的属性之外还有其他几个属性,因此oAdapter似乎不太可能是问题。

2 个答案:

答案 0 :(得分:2)

第一个是正确的语法。

If oAdapter.ExampleProperty Is Nothing Then (...)

如果您收到“对象引用未设置为对象的实例”,则oAdapterNothingnull)或ExampleProperty实际上不是你建议的自动参数。

答案 1 :(得分:0)

或许尝试这样(显然,如果没有你的代码,我无法测试):

Dim oAdapter as ComAdapter
... (code to retrieve instance ComAdapter)

Dim oCustomType as CustomType

Set oCustomType = oAdapter.ExampleProperty

if oCustomType Is Nothing Then (...)