【问题标题】:VB6 and Delphi - TStringList is free by VBVB6 和 Delphi - TStringList 由 VB 免费提供
【发布时间】:2012-03-26 18:09:50
【问题描述】:

我有以下情况: 在 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

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

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

谢谢各位,谁能帮帮我......将不胜感激

【问题讨论】:

  • 它听起来如何在 txt 和您的组件之间进行某种类型的绑定。将 dim x 作为 spdComponent "newline" x = new spdComponent 而不是 dim x as new spdComponent

标签: delphi vb6 ocx tstringlist


【解决方案1】:

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

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

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

如果有什么变化,请告诉我们...

【讨论】:

  • 仍然返回“ConvertType类型的方法”接口“失败”
  • 我在 VB.Net 中实现了我的程序,它工作正常。适应了所要求的,并且奏效了。我做了相反的事情,拿了 VB.Net 代码并放了一个按钮并运行,但仍然给出相同的消息,除了 EurekaLog 告诉正在发生的事情“多空闲内存”之外,有些东西导致我的 TStringList 没有“授权” 。”是什么让我怀疑它是否是 Delphi 和 VB 冲突。在调试我的 DLL 时,我意识到 StringList 以“突然出现”结束。出于这个原因,我认为 VB 和 Delphi 正在发生利益冲突。 (对不起我的英语)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多