Principales respuestas
Cómo usar un proyecto activex dll en un proyecto standard exe

Pregunta
-
Hola a todos,
tengo un proyecto activex dll (con una clase definida) y necesito poder ejecutarlo desde un exe para poder depurarlo.
Supong que tendré que hacer un createobject para crear un objeto de esa clase pero no se cómo hacerlo.
¿Hay que importar esa clase en el exe? ¿Alguien me puede ayudar?
Gracias de antemano.
Saludos.
Respuestas
-
Quita la linea theBascula.InputLen = 0 y pone este código para ver que te manda la báscula:
If Len(cadena_ok) > 0 Then
' Quita las dos lineas de momento
' On Error Resume Next
' PesoBascula = CDbl(cadena_ok)msgbox PesoBascula
End IfSaludos, Javier J
- Marcado como respuesta droig viernes, 20 de septiembre de 2013 10:41
Todas las respuestas
-
Para usar la Dll en tu proyecto debes empezar por entrar en Referencias y añadir la referencia a la dll en cuestión.
Luego, en el código creas la instancia con algo como
Dim miObjecto as New miClase
Saludos, Javier J
- Propuesto como respuesta Sergio Parra jueves, 5 de septiembre de 2013 7:41
-
-
-
Dentro de la dll tengo creado una función a la que le paso un entero y me devuelver un double.
No encuentro ejemplos y por lo que sea lo estoy haciendo mal. ¿Me puedes decir cómo se crearía y se llamaría a la función? o ¿alguna página con códigos de ejemplo?
Gracias y perdona las molestias.
-
-
Eso ocurre cuando le das el mismo nombre a la clase (o al módulo) que al procedimiento o función.
Si por ejemplo estás creando una clase MiClase no puedes darle ese nombre a la propio módulo de clase en el entorno de desarrollo.Saludos, Javier J
-
-
-
Hola Javier,
casi lo tengo. Lo que estoy intentando es leer una báscula por el puerto comm. Según el manual que tengo la traza que devuelve es así:
<STX><SOH><ST>PPPPPPPP<CR><LF><ETX>
El caso es que sólo puedo leer los dos último dígitos del peso. He probado con un replace para quitar el cr y el lf pero nada. También he probado con el right y left pero lo mismo. ¿Se te ocurre cómo lo puedo formatear?
Saludos y gracias.
-
-
La dll tiene el siguiente código:
Public Function PesoBascula(commPort As Integer) As Double
Dim theBascula As MSComm
Dim cadenas(3) As String
Dim cadena As String
Dim cadena_ok As String
Dim strCheck As String
Dim Peso As String
Dim i As Long
Dim t0 As Single
Dim dummy As Integer
Dim ini As Integer
Dim fin As Integer
Dim txtError As String
Set theBascula = New MSComm
theBascula.commPort = commPort
theBascula.Handshaking = 0
theBascula.RThreshold = 1
theBascula.RTSEnable = True
theBascula.Settings = "9600,n,8,1"
theBascula.SThreshold = 1
On Error GoTo FalloAbrirPuerto
theBascula.PortOpen = True
theBascula.InputLen = 0
'Parametrizamos el objeto Conexion a puerto Comm
If theBascula.PortOpen = False Then theBascula.PortOpen = True
theBascula.InputLen = 0
i = 0
Do While PesoBascula = 0 And i < 2000
i = i + 1
DoEvents
theBascula.Output = "$"
cadena = (theBascula.Input)
cadena_ok = cadena
' cadena_ok = Right(cadena, 8)
' cadena_ok = Left(cadena_ok, 6)
If Len(cadena_ok) > 0 Then
On Error Resume Next
PesoBascula = CDbl(cadena_ok)
End If
Loop
'Cerramos el puerto de comunicaciones
theBascula.PortOpen = False
If PesoBascula <= 0 Then PesoBascula = -2
Set theBascula = Nothing
Exit Function
FalloAbrirPuerto:
PesoBascula = -1
Exit Function
End Function
============
y el exe:
Private Sub Command1_Click()
Dim objbascula As Object
Dim commPort As Double
Dim Peso As Double
Set objbascula = CreateObject("Bascula.class1")
Peso = objbascula.PesoBascula(4)
MsgBox ("peso : " & Peso)
End Sub=========
Muchas gracias.
- Editado droig lunes, 9 de septiembre de 2013 15:33
-
Quita la linea theBascula.InputLen = 0 y pone este código para ver que te manda la báscula:
If Len(cadena_ok) > 0 Then
' Quita las dos lineas de momento
' On Error Resume Next
' PesoBascula = CDbl(cadena_ok)msgbox PesoBascula
End IfSaludos, Javier J
- Marcado como respuesta droig viernes, 20 de septiembre de 2013 10:41
-
-
-
Javier,
perdona por no contestar a tiempo. Ya lo tengo solucionado en un wxp. Muchas gracias.
Ahora estoy reproduciéndolo en un w7. Si lo depuro lo hace bien pero cuando compilo y genero la dll algo debo hacer mal al registrarla.
¿Dónde debo registrarla en la carpeta syswow64 o en la carpeta que me genera al desempaquetar el proyecto en C:\Program Files (x86)\Bascula?
Saludos.
-
-
En el paquete me mete los siguiente archivos:
Bascula.dll C:\temp\bascula
MSCOMES.DLL c:\windows\syswow64
MSCOMM32.OCX c:\windows\syswow64
VB6ES.DLL c:\windows\system32Yo sólo estoy registrando la bascula.dll en la ruta que se instala que es la C:\Program Files (x86)\Bascula
¿Debería registrar las otras dll?....
-
-
-
-
No me da ningún error. Lo que sucede que el resultado no es el esperado.
Como decía en xp ya recojo el pero bien. La cadena que me devuelve la báscula es, por ejemplo, "A 35670", es decir, el peso es 35670. Como bien me corregiste en el código con quitar unas líneas y hacer un right(peso, 8) lo solucioné. Creé la dll y empaqueté en programita y en el xp me devuelve el peso correctamente.
En windows 7, sin embargo me sigue devolviendo sólo los dos últimos carácteres de la cadena, por ejemplo, en este caso un "70". Eso una vez genero la dll bascula.dll, empaqueto todo y lo instalo. Una vez hecho esto registro la dll y pruebo el programa.
Sin embargo, si depuro la dll en vb6 me devuelve el peso correctamente. Por eso preguntaba dónde debía poner la dll si dejarla en la carpeta de instalación o en syswow64.... y registrarla.
-
Puedes crearte un fichero en el que guardes las lecturas que te devuelve la báscula.
Esta función te va a crear un fichero Lecturas.txt en la ruta de la aplicación:
Private Sub EscribeLinea (Texto as String) Const fic As String = "My.Application.Info.DirectoryPath\Lecturas.txt" Dim sw As New System.IO.StreamWriter(fic, True) sw.WriteLine(Texto) sw.Close() End SUb
Haz una llamada a esta función en
If Len(cadena_ok) > 0 Then
On Error Resume NextEscribeLinea (cadena_ok)
PesoBascula = CDbl(cadena_ok)
End IfSaludos, Javier J
-
-
Hola Javier,
he probado la función que me dices y en Lecturas.txt, la primera vez que lo probé parecía que recogía el peso correctamente "1160" pero, a la que voy a hacer un par de cambios más ya no me ha vuelto a capturar el peos correctamente. Por lo que sea simpre me recoge sólo los dos últimos dígitos "60".
He probado a reiniciar y a poner en el código la línea "theBascula.InBufferCount = 0" que en teoría me reinicia el buffer del mscomm pero no ha funcionado.
Es como si se quedase en el buffer el mismo valor siempre y no hubiese manera de borrar.
¿Cualquier sugerencia será bien recibida?
Gracias, saludos.