DLL

19/02/2005 - 15:39 por andres | Informe spam
Buenas, quiero usar una dll hecha por mi en visual
basic .net hecha por mi en visual basic 6.0, la estoy
declarando de la siguiente manera en .net:
Private Declare Ansi Function crypto Lib "Crypto.dll"
Alias "mia" (ByVal llave As String, ByVal datos As
String, ByVal funcion As Long, ByVal result As String) As
Long, cuando llega al punto que necesito usarla en el
programa me sale el siguiente error:
An unhandled exception of
type 'System.EntryPointNotFoundException' occurred in
EcoCapital.exe

Additional information: No se puede encontrar el punto de
entrada denominado mia en el archivo DLL Crypto.dll.
quisiera porque pasa eso y como puedo usar mi dll.
Gracias

Preguntas similare

Leer las respuestas

#1 A.Poblacion
19/02/2005 - 16:19 | Informe spam
"andres" wrote in message
news:027401c51690$c71a79f0$
Buenas, quiero usar una dll hecha por mi en visual
basic .net hecha por mi en visual basic 6.0, la estoy
declarando de la siguiente manera en .net:
Private Declare Ansi Function crypto Lib "Crypto.dll"
Alias "mia" (ByVal llave As String, ByVal datos As
String, ByVal funcion As Long, ByVal result As String) As
Long, cuando llega al punto que necesito usarla en el
programa me sale el siguiente error:
An unhandled exception of
type 'System.EntryPointNotFoundException' occurred in
EcoCapital.exe

Additional information: No se puede encontrar el punto de
entrada denominado mia en el archivo DLL Crypto.dll.
quisiera porque pasa eso y como puedo usar mi dll.



Las DLLs que genera el visual basic 6 son objetos COM, no son dlls como
las de sistema. Por lo tanto, no tienes que acceder a ella a través de
P/Invoke, como estás haciendo, sino a través de Com Interop.

En otras palabras, en lugar del Declare Function, lo que tienes que
hacer con el Visual Studio es ir al proyecto y en "referencias" decirle
"agregar referencia", y en la ventana que sale seleccionar la pestaña que
dice "COM", y desde ella buscar tu dll de VB6. Una vez hecho eso, la manejas
desde tu programa igual que si fuera nativa de .Net (haces un New de la
clase que haya en la dll y llamas a sus métodos).
Respuesta Responder a este mensaje
#2 Pedro Luna Montalvo, MVP
19/02/2005 - 18:19 | Informe spam
Saludos,

Como bien te indicaron, el mecanismo para la importacion de las funciones de
VB6 es diferente, debido a que VB6 no genera DLL puras, sino en su lugar
genera componentes COM.

El siguiente es un ejemplo de como interoperar de una forma sencilla:


1. Crear un proyecto de DLL ActiveX en VB6. Ponerle al proyecto como nombre
ProyectoVb6. Renombrar la clase que se crea de forma predeterminada Class1
por ClaseVb6.

2. Agrega el siguiente codigo a ClaseVb6.

Public Property Get Mensaje() As String
Mensaje = "Este es un mensaje desde VB6"
End Property

3. Dale F5 e indica que se quede en espera a que el componente sea
instanciado.


4. Crea un proyecto Windows en VB.NET. Agrega un boton al formulario Form1,
y agrega el siguiente codigo al manejador del evento Click de ese boton:

' Obtengo el descriptor del tipo por el ProgID
Dim oTipoObjVB6 As Type Type.GetTypeFromProgID("ProyectoVb6.ClaseVb6")

' Obtengo una instancia del elemento
Dim oObjectVB6 As Object = Activator.CreateInstance(oTipoObjVB6)

' Invoco a su propiedad para recuperar el valor
Dim sMensaje As String = oTipoObjVB6.InvokeMember("Mensaje", _
Reflection.BindingFlags.GetProperty, Nothing, _
oObjectVB6, Nothing)

MessageBox.Show(sMensaje)

5. Ejecutalo y dale click al boton!


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu
Respuesta Responder a este mensaje
#3 Andres
19/02/2005 - 19:17 | Informe spam
Bueno creo que me equivoque, la dll esta hecha en visual
c++ 6.0.. y quiero usarla en visual basic .net...

Saludos,

Como bien te indicaron, el mecanismo para la importacion


de las funciones de
VB6 es diferente, debido a que VB6 no genera DLL puras,


sino en su lugar
genera componentes COM.

El siguiente es un ejemplo de como interoperar de una


forma sencilla:


1. Crear un proyecto de DLL ActiveX en VB6. Ponerle al


proyecto como nombre
ProyectoVb6. Renombrar la clase que se crea de forma


predeterminada Class1
por ClaseVb6.

2. Agrega el siguiente codigo a ClaseVb6.

Public Property Get Mensaje() As String
Mensaje = "Este es un mensaje desde VB6"
End Property

3. Dale F5 e indica que se quede en espera a que el


componente sea
instanciado.


4. Crea un proyecto Windows en VB.NET. Agrega un boton


al formulario Form1,
y agrega el siguiente codigo al manejador del evento


Click de ese boton:

' Obtengo el descriptor del tipo por el ProgID
Dim oTipoObjVB6 As Type >Type.GetTypeFromProgID("ProyectoVb6.ClaseVb6")

' Obtengo una instancia del elemento
Dim oObjectVB6 As Object =


Activator.CreateInstance(oTipoObjVB6)

' Invoco a su propiedad para recuperar el valor
Dim sMensaje As String = oTipoObjVB6.InvokeMember


("Mensaje", _
Reflection.BindingFlags.GetProperty,


Nothing, _
oObjectVB6, Nothing)

MessageBox.Show(sMensaje)

5. Ejecutalo y dale click al boton!


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu


.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida