2017-12-04 39 views
1

내 작업은 VB.NET 라이브러리를 작성하여 VB6 응용 프로그램과 상호 작용하는 것입니다. 이 VB6 응용 프로그램은 관리되지 않는 COM DLL 몇 가지를 제공합니다.VB.net 프로젝트에서 COM DLL의 IntPtr 값을 설정하십시오.

(tlbimp를 사용하여) interop 유형을 만들고이를 VB.NET 프로젝트의 참조로 추가했습니다.

글쎄, 또한도 (기본) COM DLL을 참조하는 기존의 오래된 VB6 프로젝트 (라이브러리)가,의 ​​그들 COM1.dll, COM2.dllCOM3.dll를 호출 할 수 있습니다. 는 다음을 수행되는 경우이 오래된 프로젝트는 claMod라는 "클래스 모듈을"데 : claClass1COM3COM1.MyPointerCOM2.MyPointer의 클래스입니다

Option Explicit 
    Public Property Set GlobalProp(oObj As claClass1) 
      Set COM1.MyPointer = oObj 
      Set COM2.MyPointer = oObj 
    End Property 

유형 System.IntPtr의이다.

내 질문은 : 해당 개체 (COM1 및 COM2의 인스턴스)를 선언하지 않고이 두 포인터를 설정하는 방법은 무엇입니까 ?? 둘째, 어떻게하면 새 VB.NET 라이브러리에서 동일한 작업을 수행 할 수 있습니까?

+0

포인터가 아닌 참조이며 MyPointer 속성은 claClass1과 호환되는 형식입니다. 귀하의 VB6 예제에서 COM1/2 어딘가에 구체화해야합니다 ... –

+0

@AlexK. 어딘가에 인스턴스화해야합니다. 그렇지만 클래스는 Instancing 속성을 GlobalMultiUse로 설정하여 런타임에 자동으로 인스턴스화됩니다. – BobRodes

답변

1

구체적으로 인스턴스화하지 않고 COM1 및 COM2를 참조하려면 각 클래스의 Instancing 속성을 GlobalMultiUse로 설정하십시오. 그런 다음 게시물에있는 코드는 참조를 만들 필요없이 작동합니다.

이미 많은 개체가 VB6 환경에서 실행되고 있습니다. Screen 개체는 익숙한 예제입니다.

VB.Net에서 Shared 클래스를 선언하거나 C#에서 static 클래스를 선언하는 것과 기본적으로 동일합니다.