![]() |
dll para otros lenguajes
Hola gente, todavía no estoy del todo seguro de si esta consulta va en este foro, ustedes sabrán decirme.
Tengo que hacer una dll para que otros la usen con vb6. El problema que tengo es que mi librería anda perfecto desde delphi6 pero cuando se la entrego a mi cliente no tienen forma de hacerla andar con vb6. Según me cuentan la aplicación muestra un error de "la memoria no se puede 'written'" y termina. Mi pregunta puntual es, debería hacer algo especial dentro de la librería para permitir su uso desde otros lenguajes? Hasta donde mis conocimiento llegan una dll para win32 debería poder ser utilizada sin problemas pero evidentemente hay algo mal que no anda bien. Salute!!! FryGuy |
dll para otros lenguajes
Hola FryGuy!
¿Has probado cambiar la forma de manejar los parámetros en la librería? Si ya lo has intentado, entonces ignora todo lo que voy a escribir, si no tal vez esto te pueda servir. Posiblemente el problema radica en la forma de manejar los parámetros, algunos lenguajes tiene la convención de acumular los parámetros en la pila de izquierda a derecha y otros de derecha a izquierda. Cuando creas una función o procedimiento puedes especificar que convención deseas emplear de la siguiente manera:
En Delphi la convención por default es register que es izquierda-derecha al igual que la convención pascal. Para otros lenguajes como 'C' se deben utilizan las convenciones cdecl, stdcall y safecall que son derecha-izquierda. La API de Windows utiliza las convenciones stdcall y safecall. Podrías intentar con otras convenciones solo para descartar posibilidades y encontrar el error. Espero que te sea útil |
Buenas y gracias por la respuesta.
Probé las diferentes convenciones de pasado de parámetros solo por probar. En este caso no era necesario ya que solo estaba usando un parámetro y creo que no es necesario. Gracias igualmente, valoro tanto una respuesta que me solucione el problema como una que no. Siempre es bueno saber que hay gente que intenta ayudar a los demás. Salute! Y felicez fiestas! |
Holas! ayudaria mucho si mostraras el prototipo de la funcion de la que se habla, asi podriamos ayudarte mejor ;)
|
Limpié las últimas pruebas hechas y el encabezado es el siguiente.
Código:
|
Holas! me imaginé que el parametro era de tipo string, tu problema podria ser que VB y Delphi manejan de foma distinta los tipos string o como se produce su pasaje en la funcion, es decir si es por valor o por referencia, igualmente no podria decirte con exactitud.
Pero te recomendaria que pruebes declarar tu funcion de la siguinete forma: si el problema fuera el que te comenté, esto deberia funcionar... cualquier cosa avisanos! |
Solo puntualizar que aunque solo se indique un parametro es necesario especificar sdcall o la convencion que sea necesaria. Ya que la diferencia no solo esta en el orden de los parametros, sino en quien se encarga de eliminar de la pila los parametros, asi que si no se indica la convencion adecuada, el programa dara errores bestias.
Saludos |
Seguí los consejos de ustedes y por lo menos la cosa empieza a andar.
Ahora el único problema que tengo es que al usar la dll en VB la aplicación da un error al cerrarla, pero ninguno mientras se usa. Calculo que debe ser un problema de administración de memoria o de la forma en que se llama. Desde VB la llamada la hago así: Código:
Declare Function GenerateMD5 Lib "MD5.dll" (Cadena As String) As Long |
La franja horaria es GMT +2. Ahora son las 07:20:01. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi