none
Usar dll con C#. RRS feed

  • Pregunta

  • Hola amigos:

    Deseo usar todas las funciones de una dll hecho con Visual Basic 6 bajo Visual C# Express 2008. Si no se puede con C#, espero que se pueda hacef con Visual Basic .net Express 2008.

    Saludos a todos/as.

    http://electronica-pic.blogspot.com
    martes, 2 de junio de 2009 4:20

Respuestas

  • Hola,
    pues deberás crearte lo que se llama un wrapper o clase envoltorio, sin más te paso un enlace en el que se te explica como puedes hacerlo:

    http://msdn.microsoft.com/es-es/library/aa288468(VS.71).aspx

    Espero que te sirva de ayuda!, un saludo.
    Héctor
    • Marcado como respuesta Metaconta miércoles, 3 de junio de 2009 4:04
    martes, 2 de junio de 2009 7:16
  • La DLL hecha con VB6 es un objeto COM. Los objetos COM se pueden usar desde C# (y desde VB.Net) añadiendo una Referencia al Proyecto. En la ventana de añadir referencias se selecciona la pestaña "COM", y se busca tu DLL (que saldrá en esa ventana si se ha registrado previamente con el REGSVR32). Visual Studio genera automáticamente el "wrapper", y se puede usar desde código como si fuera una librería de .Net.
    martes, 2 de junio de 2009 12:26
    Moderador
  • Hola, Jonathan... Aca te pongo unas imagenes :

    1.- creas la dll con VB6


    2.- Luego la consumimos desde c#.Net. Para ello antes registramos la dll creada y la aadimos como referencia :






    Para consumirla, hemos creado una clase con un metodo estatico, y listo.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using LibMath;
    
    namespace UsoDllVB6
    {
        class LibMantExt
        {
            public static bool EsImpar(short pNumero)
            {
                MethodsMath x = new MethodsMathClass();
                bool valor = x.EsPar(ref pNumero);
    
                return !valor;
    
    
            }
        }
    }
    

    De esta manera puedes consumirla.

    bueno, espero te haya sido de utilidad.
    Saludos...

    El hombre mas poderoso del mundo es aquel que es dueño de si mismo
    • Propuesto como respuesta Pedro J Marquez martes, 2 de junio de 2009 23:29
    • Marcado como respuesta Metaconta miércoles, 3 de junio de 2009 4:04
    • Desmarcado como respuesta Metaconta miércoles, 3 de junio de 2009 4:04
    • Marcado como respuesta Metaconta miércoles, 3 de junio de 2009 4:04
    martes, 2 de junio de 2009 22:59

Todas las respuestas

  • Hola,
    pues deberás crearte lo que se llama un wrapper o clase envoltorio, sin más te paso un enlace en el que se te explica como puedes hacerlo:

    http://msdn.microsoft.com/es-es/library/aa288468(VS.71).aspx

    Espero que te sirva de ayuda!, un saludo.
    Héctor
    • Marcado como respuesta Metaconta miércoles, 3 de junio de 2009 4:04
    martes, 2 de junio de 2009 7:16
  • La DLL hecha con VB6 es un objeto COM. Los objetos COM se pueden usar desde C# (y desde VB.Net) añadiendo una Referencia al Proyecto. En la ventana de añadir referencias se selecciona la pestaña "COM", y se busca tu DLL (que saldrá en esa ventana si se ha registrado previamente con el REGSVR32). Visual Studio genera automáticamente el "wrapper", y se puede usar desde código como si fuera una librería de .Net.
    martes, 2 de junio de 2009 12:26
    Moderador
  • Hola a todos

    Como hago en caso de que quiera crear una clase con la DLL de VB 6.0 para utilizarla en mis proyectos de VB.net y VC# 2008 ?? Como se llaman a las funciones de la dll y como integro esa clase en mi proyecto ??
    martes, 2 de junio de 2009 16:39
  • Hola, Jonathan... Aca te pongo unas imagenes :

    1.- creas la dll con VB6


    2.- Luego la consumimos desde c#.Net. Para ello antes registramos la dll creada y la aadimos como referencia :






    Para consumirla, hemos creado una clase con un metodo estatico, y listo.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using LibMath;
    
    namespace UsoDllVB6
    {
        class LibMantExt
        {
            public static bool EsImpar(short pNumero)
            {
                MethodsMath x = new MethodsMathClass();
                bool valor = x.EsPar(ref pNumero);
    
                return !valor;
    
    
            }
        }
    }
    

    De esta manera puedes consumirla.

    bueno, espero te haya sido de utilidad.
    Saludos...

    El hombre mas poderoso del mundo es aquel que es dueño de si mismo
    • Propuesto como respuesta Pedro J Marquez martes, 2 de junio de 2009 23:29
    • Marcado como respuesta Metaconta miércoles, 3 de junio de 2009 4:04
    • Desmarcado como respuesta Metaconta miércoles, 3 de junio de 2009 4:04
    • Marcado como respuesta Metaconta miércoles, 3 de junio de 2009 4:04
    martes, 2 de junio de 2009 22:59
  • Muchisimas gracias fafner te estoy muy agradecido , yo ya tengo la dll lista ahora lo que me quedaría es registrarla y usarla. Ahora el tema es como usar las funciones de la misma que están  desarrolladas en un modulo .bas de VB 6.0 en un entorno de VC#. Mañana posteo las funciones para ver si me pueden dar una mano.

    Desde ya muchas gracias nos mantenemos en contacto.
    miércoles, 3 de junio de 2009 3:56
  • Bueno yo de vuelta: Luego de que trate de registrar la DLL me apareció el siguiente error al tratar de meter la dll en mi proyecto de VC#:
    href='http://www.servidor-imagenes.com/show-image.php?id=ce6965d822c72742e7e75f25b50

    Las funciones de la DLL que estoy utilizando son las siguientes: Está en el archivo .bas

    Attribute VB_Name = "HIDDLLInterface"
    ' this is the interface to the HID controller DLL - you should not
    ' normally need to change anything in this file.
    '
    ' WinProc() calls your main form 'event' procedures - these are currently
    ' set to..
    '
    ' MainForm.OnPlugged(ByVal pHandle as long)
    ' MainForm.OnUnplugged(ByVal pHandle as long)
    ' MainForm.OnChanged()
    ' MainForm.OnRead(ByVal pHandle as long)
    
    Option Explicit
    
    ' HID interface API declarations...
    Declare Function hidConnect Lib "mcHID.dll" Alias "Connect" (ByVal pHostWin As Long) As Boolean
    Declare Function hidDisconnect Lib "mcHID.dll" Alias "Disconnect" () As Boolean
    Declare Function hidGetItem Lib "mcHID.dll" Alias "GetItem" (ByVal pIndex As Long) As Long
    Declare Function hidGetItemCount Lib "mcHID.dll" Alias "GetItemCount" () As Long
    Declare Function hidRead Lib "mcHID.dll" Alias "Read" (ByVal pHandle As Long, ByRef pData As Byte) As Boolean
    Declare Function hidWrite Lib "mcHID.dll" Alias "Write" (ByVal pHandle As Long, ByRef pData As Byte) As Boolean
    Declare Function hidReadEx Lib "mcHID.dll" Alias "ReadEx" (ByVal pVendorID As Long, ByVal pProductID As Long, ByRef pData As Byte) As Boolean
    Declare Function hidWriteEx Lib "mcHID.dll" Alias "WriteEx" (ByVal pVendorID As Long, ByVal pProductID As Long, ByRef pData As Byte) As Boolean
    Declare Function hidGetHandle Lib "mcHID.dll" Alias "GetHandle" (ByVal pVendoID As Long, ByVal pProductID As Long) As Long
    Declare Function hidGetVendorID Lib "mcHID.dll" Alias "GetVendorID" (ByVal pHandle As Long) As Long
    Declare Function hidGetProductID Lib "mcHID.dll" Alias "GetProductID" (ByVal pHandle As Long) As Long
    Declare Function hidGetVersion Lib "mcHID.dll" Alias "GetVersion" (ByVal pHandle As Long) As Long
    Declare Function hidGetVendorName Lib "mcHID.dll" Alias "GetVendorName" (ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long
    Declare Function hidGetProductName Lib "mcHID.dll" Alias "GetProductName" (ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long
    Declare Function hidGetSerialNumber Lib "mcHID.dll" Alias "GetSerialNumber" (ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long
    Declare Function hidGetInputReportLength Lib "mcHID.dll" Alias "GetInputReportLength" (ByVal pHandle As Long) As Long
    Declare Function hidGetOutputReportLength Lib "mcHID.dll" Alias "GetOutputReportLength" (ByVal pHandle As Long) As Long
    Declare Sub hidSetReadNotify Lib "mcHID.dll" Alias "SetReadNotify" (ByVal pHandle As Long, ByVal pValue As Boolean)
    Declare Function hidIsReadNotifyEnabled Lib "mcHID.dll" Alias "IsReadNotifyEnabled" (ByVal pHandle As Long) As Boolean
    Declare Function hidIsAvailable Lib "mcHID.dll" Alias "IsAvailable" (ByVal pVendorID As Long, ByVal pProductID As Long) As Boolean
    
    ' windows API declarations - used to set up messaging...
    Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    
    ' windows API Constants
    Private Const WM_APP = 32768
    Private Const GWL_WNDPROC = -4
    
    ' HID message constants
    Private Const WM_HID_EVENT = WM_APP + 200
    Private Const NOTIFY_PLUGGED = 1
    Private Const NOTIFY_UNPLUGGED = 2
    Private Const NOTIFY_CHANGED = 3
    Private Const NOTIFY_READ = 4
    
    ' local variables
    Private FPrevWinProc As Long    ' Handle to previous window procedure
    Private FWinHandle As Long      ' Handle to message window
    
    ' Set up a windows hook to receive notification
    ' messages from the HID controller DLL - then connect
    ' to the controller
    Public Function ConnectToHID(ByVal pHostWin As Long) As Boolean
       FWinHandle = pHostWin
       ConnectToHID = hidConnect(FWinHandle)
       FPrevWinProc = SetWindowLong(FWinHandle, GWL_WNDPROC, AddressOf WinProc)
    End Function
    
    ' Unhook from the HID controller and disconnect...
    Public Function DisconnectFromHID() As Boolean
       DisconnectFromHID = hidDisconnect
       SetWindowLong FWinHandle, GWL_WNDPROC, FPrevWinProc
    End Function
    
    ' This is the procedure that intercepts the HID controller messages...
    Private Function WinProc(ByVal pHWnd As Long, ByVal pMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
       If pMsg = WM_HID_EVENT Then
           Select Case wParam
            
            ' HID device has been plugged message...
            Case Is = NOTIFY_PLUGGED
               MainForm.OnPlugged (lParam)
    
            ' HID device has been unplugged
            Case Is = NOTIFY_UNPLUGGED
               MainForm.OnUnplugged (lParam)
            
            ' controller has changed...
            Case Is = NOTIFY_CHANGED
               MainForm.OnChanged
    
            ' read event...
            Case Is = NOTIFY_READ
               MainForm.OnRead (lParam)
            End Select
       
       End If
       
       ' next...
       WinProc = CallWindowProc(FPrevWinProc, pHWnd, pMsg, wParam, lParam)
       
    End Function
    Dentro del código fuente del programa se encuentra lo siguiente:

    ' vendor and product IDs
    Private Const VendorID = 6017
    Private Const ProductID = 2000
    
    ' read and write buffers
    Private Const BufferInSize = 8
    Private Const BufferOutSize = 8
    Dim BufferIn(0 To BufferInSize) As Byte
    Dim BufferOut(0 To BufferOutSize) As Byte
    
    ' ****************************************************************
    ' when the form loads, connect to the HID controller - pass
    ' the form window handle so that you can receive notification
    ' events...
    '*****************************************************************
    Private Sub Form_Load()
       ' do not remove!
       ConnectToHID (Me.hwnd)
    End Sub
    
    '*****************************************************************
    ' disconnect from the HID controller...
    '*****************************************************************
    Private Sub Form_Unload(Cancel As Integer)
       DisconnectFromHID
    End Sub
    
    '*****************************************************************
    ' a HID device has been plugged in...
    '*****************************************************************
    Public Sub OnPlugged(ByVal pHandle As Long)
       If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then
          ' ** YOUR CODE HERE **
       End If
    End Sub
    
    '*****************************************************************
    ' a HID device has been unplugged...
    '*****************************************************************
    Public Sub OnUnplugged(ByVal pHandle As Long)
       If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) = ProductID Then
          ' ** YOUR CODE HERE **
       End If
    End Sub
    
    '*****************************************************************
    ' controller changed notification - called
    ' after ALL HID devices are plugged or unplugged
    '*****************************************************************
    Public Sub OnChanged()
       Dim DeviceHandle As Long
       
       ' get the handle of the device we are interested in, then set
       ' its read notify flag to true - this ensures you get a read
       ' notification message when there is some data to read...
       DeviceHandle = hidGetHandle(VendorID, ProductID)
       hidSetReadNotify DeviceHandle, True
    End Sub
    
    '*****************************************************************
    ' on read event...
    '*****************************************************************
    Public Sub OnRead(ByVal pHandle As Long)
       
       ' read the data (don't forget, pass the whole array)...
       If hidRead(pHandle, BufferIn(0)) Then
          ' ** YOUR CODE HERE **
          ' first byte is the report ID, e.g. BufferIn(0)
          ' the other bytes are the data from the microcontrolller...
       End If
    End Sub
    
    '*****************************************************************
    ' this is how you write some data...
    '*****************************************************************
    Public Sub WriteSomeData()
       BufferOut(0) = 0   ' first by is always the report ID
       BufferOut(1) = 10  ' first data item, etc etc
    
       ' write the data (don't forget, pass the whole array)...
       hidWriteEx VendorID, ProductID, BufferOut(0)
    End Sub
     
    
    El tema que la dll no me deja integrarla como me habian explicado antes y necesito saber como utilizar las funciones en VC# 2008
    jueves, 4 de junio de 2009 4:15