2012-03-26 25 views
-1

Ich habe die folgende Situation: Ein Objekt wird in VB6 mit OCX in Delphi instanziiert. wenn ichVB6 und Delphi - TStringList ist frei von VB

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

Count korrekt den Wert aller Elemente des TStringList OCX empfängt, aber bald unter der Zeile, wo TXT leer wird, wird der Wert von ‚x.item.cout‘ verloren. Wenn ich in Delphi debugge, was in Wirklichkeit passiert, ist eine TStringList aus dem Speicher freigegeben werden, aber das passiert ohne Sinn (es scheint, dass es einen Interessenkonflikt zwischen Delphi und VB). Suche hier und auf Google, sah ich, dass viele kommentiert nicht mit TStringList aber PChar, es wäre eine angemessenere Art zu arbeiten, aber die Frage bleibt, wie C# 2005 und die gleiche OCX verwenden, ist das Problem nicht tritt ein. (wie in anderen Sprachen, nur in VB 6, so weit).

Nun, ich habe Beweise, dass die VB das Objekt (TStrinList) tötet, weil für ihn das Objekt nicht mehr notwendig ist, aber es tut. Eine seltsame Sache, die passiert ist, wenn ich

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

Es Arbeit ist, tun alle notwendigen Prozesse ohne Fehler, aber das erste Fall, der Fehler bleibt.

Hat jemand ähnliche Probleme festgestellt?

Danke Jungs, jeder, der mir eine Hand geben kann ... wird

+1

Bitte zeigen die delphi-Code. –

+0

es klingt wie einige Bindung zwischen txt und Ihre Komponente. Setzen Sie dim x als spdComponent "newline" x = neue spdComponent statt dim x als neue spdComponent –

Antwort

1

AFAIR dankbar sein, VB Klassische verwendet Referenzzählwert Semantik für die Verwaltung des Speichers. Das bedeutet, dass irgendwo in Ihrem Code alle Verweise auf die Instanz, die von spdComponent.ConverterType(XML) erstellt wurde, gelöscht werden (auf Nothing zeigen) oder den Gültigkeitsbereich verlassen haben.

EDIT: in Sie Code zerstören Sie die Instanz von Dim x As New spdComponent erstellt, wenn Sie Set x = spdComponent.ConverterType (XML) tun. Vielleicht könnten Sie dies testen:

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

Und uns sagen, ob sich etwas geändert ...

+0

Immer noch "Methode des Typs ConvertType" Schnittstelle "failed" –

+0

Ich habe mein Programm in VB.Net implementiert und es funktioniert normal. Angepasst an was angefordert wurde, und es hat funktioniert. Ich tat das Gegenteil, nahm den VB.Net-Code und legte einen Button und rannte, aber immer noch die gleiche Nachricht, zusätzlich zu den EurekaLog erzählt, was passiert "Multi Free Memory", verursacht etwas die Beseitigung meiner TStringList ohne "Autorisierung . " Was mich dazu bringt, in Frage zu stellen, ob es sich um den Konflikt zwischen Delphi und VB handelt. Indem ich Debug meine DLL mache, merke ich, dass StringList endet, "einfach aus dem Nichts." Aus diesem Grund kommen VB und Delphi in einen Interessenkonflikt. (Entschuldige mein Englisch) –