문제

VB6 응용 프로그램에서 사용하는 도트 넷 컨트롤의 기본 속성을 설정해야합니다.

<ComClass(myControl.ClassId, myControl.InterfaceId, myControl.EventsId)> _
<DefaultProperty("NewProperty")> _
Public Class myControl

    Public Const ClassId As String = "86252de2-ca87-4468-adbe-ad7c47747759"
    Public Const InterfaceId As String = "c1cbf1a1-24bb-46c3-88a4-813eb4917845"
    Public Const EventsId As String = "954ed890-011c-4908-ab33-610159fe6eb1"

    Private newPropertyValue As String
    Public Property NewProperty() As String
        Get
            Return newPropertyValue
        End Get
        Set(ByVal value As String)
            newPropertyValue = value
        End Set
    End Property
End Class

defualtproperty 속성은 트릭을 수행하지 않습니다.

내가 읽고 여기 수동으로 분위기를 0으로 설정하면 트릭을 수행해야합니다. 그러나 내가 이것을한다면 :

<DispId(0)> Public Property NewProperty() As String

Visual Basic은 분위기 제로가 기본 제안을 위해 예약되어 있음을 친절하게 알려줍니다. 응. 나는 그것을 알고있다. 나는 것을 원하는. 하지만 어떻게?

편집하다:

Default Public Property NewProperty(ByVal foo As Integer) As String

속성이 이제 VB6의 기본 속성으로 표시되므로 작동합니다. 그러나 변경할 수없는 코드가 있기 때문에 이것은 내 문제를 해결하지 못할 것입니다.

aStringVariable = myUserControlInstance

이 MSDN 기사 이것에 대한 정보가 있습니다.

도움이 되었습니까?

해결책

변경할 수없는 코드가 있기 때문입니다

이 경우 원래 .NET 클래스 주위에 래퍼 클래스를 만들고 VB6에서 사용하는 컨트롤로 내보내야합니다. 그런 다음 기본 속성을 기본 키워드를 사용하는 것으로 표시 할 수 있습니다.

다른 팁

VB6의 래퍼를 만들어 VB6의 기본 속성 동작을 모방하는 다른 방법은 없습니다. 나는 몇 가지 Interop 사용자 컨트롤을 만들어야했으며 이것이 우리가 VB6에서 .NET Interop 컨트롤을 다시 래프 해야하는 주된 이유였습니다 (많은 코드 변경과 거대한 테스트 노력을 피하기 위해).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top