0

ActiveX EXE特定のクラスをサードパーティ ソフトウェアに公開する を開発しています。このサードパーティ ソフトウェアは、このクラスのオブジェクトをインスタンス化し、そのメソッドを使用します。

奇妙なことに、このサードパーティ ソフトウェアは、特定のメソッドを呼び出すとすぐに、公開されたクラスのオブジェクトを破棄しますが、なぜこれが起こるのかわかりません。

私が持っている唯一の手がかりは、このメソッドが値を返す唯一のものだということです。他のすべてのものは値を返さない単純な「サブ」であり、それらが呼び出されても何も問題はありません。

私はVB6を使用しています。

なぜそれが起こっているのか分かりますか?

4

2 に答える 2

1

オブジェクトへの最後の参照が削除されると、オブジェクトは「破棄」されます。これは通常の COM の動作です。または、オブジェクトが例外なく停止しており、サードパーティ アプリで ActiveX エラーが発生していますか?

いくつかの質問:

  • 「データサーバー」の意味がわからない?
  • サードパーティ アプリのソース コードにアクセスできますか?
  • サードパーティ アプリがオブジェクトへの参照を保持していることは確かですか?
  • オブジェクトの Class_Terminate メソッドは呼び出されていますか?

編集: OK、Class_Terminate が呼び出されると、サードパーティのアプリがオブジェクトへの参照を削除したことは明らかです。

于 2008-10-27T14:42:30.310 に答える
0

JanがCOMで述べたように、オブジェクトを参照している人がいない場合、オブジェクトは終了するのが普通です。ある種のキャッシュを実行したい場合(たとえば、DB接続を開いたままにする場合)、bas-moduleで定義されたグローバル変数を使用できます。

basGlobal.bas

Global AGlobalVariable As Object

Connector.cls

Public Function GetFoo() As Object
  If AGlobalVariable Is Nothing then
    Set AGlobalVariable = ...
  End If 
  Set GetFoo = AGlobalVariable
End Function
于 2008-10-27T15:47:29.647 に答える