none
declarar una Class en una librería DLL RRS feed

  • Pregunta

  • Buenos días amigos:

    En un desarrollo, armé una Class llamada MyLista, que me permite cargar datos en un listbox o combobox y agregarle un índice para poder referenciarlo con mi base de datos cuando no puedo usar datasource. Todo funciona bien si lo incorporo como archivo de clase, pero necesito implementarlo en una dll.

    Este es el código adaptado:

    Public Class MyLista
        '=======================================================================================
        '=======================================================================================
        Shared sName As String
        Shared iID As Integer   'You can also declare this as String.
    
        Public Sub New()
            sName = ""
            iID = 0
        End Sub
    
        Public Sub New(ByVal name As String, ByVal id As Integer)
            sName = name
            iID = id
        End Sub
    
        Shared Property Name() As String
            Get
                Return sName
            End Get
    
            Set(ByVal sValue As String)
                sName = sValue
            End Set
        End Property
    
        Public Property ItemData() As Integer
            Get
                Return iID
            End Get
    
            Set(ByVal iValue As Integer)
                iID = iValue
            End Set
        End Property
    
        Overrides Function ToString() As String
            Return sName
        End Function
    End Class
    

    Este código ha sido adaptado para cargarlo como dll, y funcionaba bien cuando lo agregaba como Class en un proyecto.  Intenté adaptarlo pero no sé qué se encuentra mal redactado para que no me devuelva los resultados esperados. Debo aclarar que es mi primera dll por lo que mis torpezas pueden ser evidentes.

    Agradezco desde ya la atención.


    Juan Carlos

    viernes, 15 de junio de 2018 12:05

Respuestas

  • Resuelto el dilema:

    El código que cargué tiene detalles que probando pude depurar. Este es el código que funciona en la DLL:

    Public Class MyLista
        Dim sName As String
        Dim iID As Integer   'You can also declare this as String.
    
        Public Sub New()
            sName = ""
            iID = 0
        End Sub
    
        Public Sub New(ByVal name As String, ByVal id As Integer)
            sName = name
            iID = id
        End Sub
    
        Public Property Name() As String
            Get
                Return sName
            End Get
    
            Set(ByVal sValue As String)
                sName = sValue
            End Set
        End Property
    
        Public Property ItemData() As Integer
            Get
                Return iID
            End Get
    
            Set(ByVal iValue As Integer)
                iID = iValue
            End Set
        End Property
    
        Overrides Function ToString() As String
            Return sName
        End Function
    End Class

    O sea, no van los shared sino los public.

    Gracias Javi Fernández por la intención y a quien le sirva, con gusto lo aproveche.


    Juan Carlos

    viernes, 15 de junio de 2018 14:30

Todas las respuestas

  • Hola Juan Carlos:

    Tiene que agregar una referencia en su proyecto a la citada dll.

    Botón derecho en el proyecto, agregar Referencia. Busque la misma por sus sistema de archivos.

    Una vez que esta agregada, no olvide utilizar un Using a su referencia en la clase donde este programando.

    Si la tiene agregada el intelisense le echará un cable en cuanto escriba MyLista m = new MyLista(), se lo marcará en rojo y le dará la opción de resolver.

    Un saludo

    viernes, 15 de junio de 2018 12:11
  • Un gusto Javi:

    Por supuesto agrego la referencia a la dll en el proyecto, y las demás funciones y rutinas que he declarado, funcionan sin inconvenientes, pero en esta (que arma una especie de matriz de datos), no me transfiere la información. Por ejemplo, en un combobox:

    'Cargo un combo con datos de esta forma:

    Public Mlist as MyLista

    Sub Carga_ Combo()

    With Combo1 For x = 0 To Gral_Table.Rows.Count - 1 Gral_Dr = Gral_Table.Rows(x) .Items.Add(New MyLista(Gral_Dr("Comentarios").ToString, CInt(Gral_Dr("Id")))) Next End With

    End Sub

    'Selección de un registro: Para buscar un registro en la lista, puedo hacerlo así

    Mlist = CType(Combo1.Items(Combo1.SelectedIndex), MyLista)
    Return Mlist.ItemData


    Esta Clase me permite relacionar el texto con el Indice. Cuando selecciono una fila, me devuelve el Indice de la tabla u origen de dato.


    Juan Carlos


    viernes, 15 de junio de 2018 13:17
  • Resuelto el dilema:

    El código que cargué tiene detalles que probando pude depurar. Este es el código que funciona en la DLL:

    Public Class MyLista
        Dim sName As String
        Dim iID As Integer   'You can also declare this as String.
    
        Public Sub New()
            sName = ""
            iID = 0
        End Sub
    
        Public Sub New(ByVal name As String, ByVal id As Integer)
            sName = name
            iID = id
        End Sub
    
        Public Property Name() As String
            Get
                Return sName
            End Get
    
            Set(ByVal sValue As String)
                sName = sValue
            End Set
        End Property
    
        Public Property ItemData() As Integer
            Get
                Return iID
            End Get
    
            Set(ByVal iValue As Integer)
                iID = iValue
            End Set
        End Property
    
        Overrides Function ToString() As String
            Return sName
        End Function
    End Class

    O sea, no van los shared sino los public.

    Gracias Javi Fernández por la intención y a quien le sirva, con gusto lo aproveche.


    Juan Carlos

    viernes, 15 de junio de 2018 14:30