Error de lectura de puerto serie "Memoria Insuficiente".
hola a todos.
Tengo una dll que uso para comunicar un dispositivo conectado al puerto COM con un programa ya realizado, la funcion que hace la lectura del puerto funciona perfectamente desde un formulario interno de la misma DLL, pero al hacer el llamado de la funcion de lectura del puerto desde el programa, realiza la funcion de apertura del puerto, la funcion del dispositivo para realizar la transaccion, pero cuando va a leer el puerto sale un mensaje que dice "memoria Insuficiente". estuve viendo con un monitor de puerto que realmente se envia los datos. aqui esta el codigo de la DLL obviamente en DELPHI:
y aqui esta el codigo de la aplicacion que usa la DLL y desafortunadamente en ViSUAL: Código:
Private Declare Function leebanda Lib "C:\pnp\dllcredicard.dll" () As String |
¿Porque lo tienes aislado en una DLL y no utilizas el MSComm para leerlo directamente desde VB?...
Tu código esta incompleto, igualmente veo un error evidente: No puedes retornar un string en la función leebanda si pretendes leerlo desde VB, ya que string es un tipo propietario de pascal, donde utiliza uno o dos bytes de longitud, para pasárselo a VB te recomiendo que retornes un “Null terminated char” (PChar) PD: Te recomiendo emplolijar un poco la identación de tu código, se hace algo incomprensible. Saludos! |
hola Federico.
bueno lo tengo aislado porque hay muchos programas que usan esta DLL, lo que estoy haciendo es mi propia version de la DLL, por lo que tengo que dejarle las mismas funciones y procedimientos o mas bien dejarle los mismo nombres. estuve haciendo la DLL en visual para usar el MSComm y realmente habian mas problemas, en algunos lados me reconocia la DLL en otros no. por lo que opte a hacerla en delphi que es donde esta hecha actualmente la DLL original. porque dices que mi codigo esta incompleto? solo hace falta ahi la estructura de la funcion "AbrirPuerto". aquie te la agrego.
estuve tratando cambiandole el tipo de dato a PChar y bueno al hacer la lectura la primera vez no sale nada, hago la lectura nuevamente y se sale solo de la aplicacion. |
Sigo viendo incoherente te código, entiendo que lo debes haber recortado de tu aplicación. Fijate el tratamiento que haces con la variable Result, primero que no se trata de una función sino de un procedure, luego le asignas un valor y posteriormente lo sobreescribes a True. Los parámetros de este procedimiento siguen siendo "String". Ademas, veo que en las funciones anteriores no se le da importancia al resultado de "AbirPuerto".
Hice un breve resumen de la DLL si cambiar las partes que no entiendo del código, y no me falla, salvo que no exista el puerto o este este abierto.
Cita:
|
hola federico bueno la verdad ya me funciono ya retorna un valor la funcion llebanda, la funcion quedo asi:
pero ahora hay un problema en el codigo de visual: Código:
Private Sub boton_leer_banda_Click() |
hola federico bueno la verdad ya me funciono ya retorna un valor la funcion llebanda, la funcion quedo asi:
pero ahora hay un problema en el codigo de visual: Código:
Private Sub boton_leer_banda_Click() Y me sale en la funcion MID de visual, porque sera eso? ah no uso la otra funcion que me pusiste de leebanda, porque no puedo cambiarle la estructura. asi hacen la llamada en los programas que ya usan esta DLL. |
Cita:
Cita:
|
consulta delphi
hola chicos, soy nuevo en el sitio, y me surgio un problema en lo que es funciones en delphi.
estuve haciendo una calculadora, y precisaba sacar la raiz, entonces utilice la funcion SQRT, pero preciso saber una funcion en la cual eleve cualquier número, me de el resultado, sea cual sea a la raiz que la eleve, alguien sabe de esta funcion. muchas gracias y espero puedan ayudarme. |
La franja horaria es GMT +2. Ahora son las 19:12:58. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi