-1

我有以下情况:在VB6中使用Delphi制作的OCX实例化一个对象。当我

...
Dim x As New spdComponent
Set x = spdComponent.ConverterType (XML)
count = x.item.count
TXT = ""
...

Count 正确接收 TStringList OCX 的所有项目的值,但很快下面的行,TXT 为空,'x.item.cout' 的值丢失。当我在Delphi中调试时,实际上发生的是从内存中释放一个TStringList,但这毫无意义(似乎Delphi和VB之间存在利益冲突)。在这里和google上搜索,我看到很多人评论说不使用TStringList而是使用PChar,这将是一种更合适的工作方式,但问题仍然是使用C#2005和相同的OCX,问题没有发生. (与其他语言一样,目前仅在 VB 6 中)。

好吧,我有证据表明 VB 杀死了对象 (TStrinList),因为对他来说,该对象不再是必需的,但它确实如此。发生的一件奇怪的事情是,如果我

count = spdComponent.ConverterType(XML).item.count

它的工作,做所有必要的过程没有任何错误,但第一种情况,错误仍然存​​在。

有没有人遇到过类似的问题?

谢谢大家,任何可以帮我的人......将不胜感激

4

1 回答 1

1

AFAIR,VB Classic 使用引用计数语义来管理内存。这意味着,在您的代码中的某处,对创建的实例的所有引用spdComponent.ConverterType(XML)都被清除(指向Nothing)或超出范围。

编辑:在您的代码中,您正在销毁您创建Dim x As New spdComponent时创建的实例Set x = spdComponent.ConverterType (XML)。也许你可以测试一下:

 ' Removed the instantiation on the declaration
Dim x As spdComponent
Set x = spdComponent.ConverterType (XML)
count = x.item.count 

并告诉我们是否发生了变化...

于 2012-03-26T20:12:23.840 回答