2017-12-04 15 views
1

私の仕事は、VB6アプリケーションと対話するためのVB.NETライブラリを作成することです。このVB6アプリケーションは、いくつかのアンマネージCOM DLLを提供します。VB.netプロジェクトでCOM DLLのIntPtr値を設定する

(tlbimpを使用して)interop型を作成し、VB.NETプロジェクトの参照として追加しました。

まあ、これも(ネイティブ)COM DLLを参照している既存の古いVB6のプロジェクト(ライブラリ)、があり、のは彼ら COM1.dllCOM2.dllCOM3.dllを呼びましょう。

claClass1COM3COM1.MyPointerにクラスであり、 COM2.MyPointerはタイプ System.IntPtrである
Option Explicit 
    Public Property Set GlobalProp(oObj As claClass1) 
      Set COM1.MyPointer = oObj 
      Set COM2.MyPointer = oObj 
    End Property 

: この古いプロジェクトでは、「クラスモジュール」は、それが次のことをやっているclaModと呼ば持っています。

私の質問は:どのように対応するオブジェクト(COM1とCOM2のインスタンス)を宣言せずにこれら2つのポインタを設定することは可能ですか?第二に、私は新しいVB.NETライブラリでどうやって同じことをすることができますか?

+0

これらは参照ではなく、MyPointerプロパティはclaClass1と互換性のある型です。あなたのVB6の例では、COM1/2はどこかでインスタンス化されなければなりません... –

+0

@AlexK。インスタンス化する必要がありますが、インスタンス化プロパティをGlobalMultiUseに設定すると、クラスは実行時に自動的にインスタンス化されます。 – BobRodes

答えて

1

具体的にインスタンス化せずにCOM1とCOM2を参照できるようにするには、各クラスのInstancingプロパティをGlobalMultiUseに設定します。あなたの投稿にあるコードは、そのコードへの参照を作成しなくても動作します。

すでにVB6環境で実行されているオブジェクトが多数あります。 Screenオブジェクトはよく知られた例です。

これは基本的にVB.NetでSharedクラス、またはC#でstaticクラスを宣言するのと同じです。

関連する問題