2012-03-26 23 views
-1

我有以下情況: 一個對象在VB6中使用OCX製作的OCX實例化。 當我VB6和Delphi - TStringList由VB免費

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

計數正確接收到的TStringList OCX的所有物品的價值,但很快線下,其中TXT變空,「x.item.cout」的值丟失。 當我在Delphi中調試時,實際上會發生什麼是從內存中釋放TStringList,但這種情況沒有任何意義(似乎Delphi和VB之間存在利益衝突)。 在這裏和谷歌上搜索,我看到很多評論關於不使用TStringList,但PChar,這將是一個更合適的工作方式,但問題仍然是使用C#2005和相同的OCX,問題不是發生。 (就像其他語言一樣,目前只在VB 6中)。嗯,我有證據表明VB殺死對象(TStrinList),因爲對他來說,該對象不再是必要的,但它確實如此。 一個出現這種情況很奇怪的是,如果我

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

它的工作,做所有必要的程序沒有任何錯誤,但第一種情況下,錯誤仍然存​​在。

有沒有人遇到過類似的問題?

謝謝你們,誰可以給我一個手...會感激

+1

請出示Delphi代碼。 – 2012-03-26 18:15:26

+0

它的聲音如何在txt和你的組件之間進行某種類型的綁定。將dim x作爲spdComponent「newline」x =新的spdComponent而不是dim x作爲新的spdComponent – 2012-03-26 18:22:34

回答

1

AFAIR,VB經典使用引用計數語義的內存管理。這意味着,在代碼中某處,清除由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 

並告訴我們,如果有什麼改變......

+0

仍然返回「Type ConvertType的方法」接口「failed」 – 2012-03-27 16:45:38

+0

我在VB.Net中實現了我的程序並且它正常工作。 適應所要求的,它的工作。我做了相反的事情,拿着VB.Net代碼並且放了一個按鈕並且運行,但是仍然給出相同的消息,除了EurekaLog告訴發生了什麼「多餘的內存」之外,某些東西正在導致消除我的TStringList而沒有「授權「。是什麼讓我質疑是否是Delphi和VB衝突。 調試我的DLL,我意識到StringList結束了,「只是出於無處。」出於這個原因,我認爲VB和Delphi正在陷入利益衝突。 (對不起,我的英語) – 2012-03-27 20:17:51