-1

私は次のような状況があります: オブジェクトは、Delphi で作成された OCX を使用して VB6 でインスタンス化されます。私がいつ

...
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) を強制終了するという証拠があります。VB にとって、そのオブジェクトはもはや必要ないからです。起こる奇妙なことの1つは、もし私が

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 に答える