¿Cómo puedo llamar a una función dentro de una DLL en Delphi?

Resulta que quiero llamar a una función que esta dentro de esta dll (CBODBC32.DLL)
Y lo hago así,
function CIALDocNouvPiece (DO_Type : integer;DO_Souche: integer; Result: string):integer; external 'CBODBC32.dll' name 'CIALDocNouvPiece';
...
aux := CIALDocNouvPiece (2, 0, '');
Pero cuando ejecuto el programa y llego a la linea de código me
sale un mensaje de error "Violation Access at 0000000x39 ..." y una pantalla con
un montón de numero en hexadecimal, etc

1 respuesta

Respuesta
1
Antes de todo, confirma si estás utilizando el driver odbc de sage, línea 100
Si este es tu caso, te puedo dar algo de ayuda.
Hola!
Esta confirmado que utilizo el driver odbc de sage.
Gracias
Primero, doy por supuesto que has instalado en la máquina el driver ODBC Sage completo, y que se trata del Gestión Comercial, que es aquel que hace referencia a los 2 ficheros; el MAE y el GCM.
Este tipo de error, suele darse (por la experiencia que tengo), cuando utilizas el driver odbc parcialmente, es decir, utilizas aquel que hace solo referencia a 1 archivo ( como sabrás, hay uno para contabilidad, otro solo para gestión y el de los 2).
Mañana, que estoy en el trabajo, te pasaré un ejemplo de llamada a esta función (tengo cosas bien documentadas)
Hola! Si, he instalado el Driver ODBC Sage en mi máquina y también me he cerciorado de que el DSN que tengo creado esta el .mae y el .gcm
Espero con ansia ese ejemplo y muchísimas gracias, no sabes lo que me ayudas. Es bueno encontrar gente así.
Vamos a ver, para empezar no declaras bien la función: te pongo el ejemplo de la función como yo al utilizo:
Function CIALDocNouvPiece (var DO_type : integer; var DO_Souche:integer; var Resultat:string): integer;
// stdcall; external 'e:\WINNT\SYSTEM32\CBODBC32.DLL';
stdcall;
external 'C:\WINDOWS\SYSTEM\CBODBC32.DLL';
En primer lugar, tienes que pasar las variables por referencia, anteponiendo 'var', pues sino, la función no podrá escribir el valor en RESULTAT y tu no podrás leer el valor modificado.
Después, siempre que utilizo el odbc de sage ( muy a menudo) acostumbro a poner la ruta completa de la DLL y siempre, repito, siempre pruebo la conexión odbc con el Access. Este ejemplo que te he pegado, es un ejemplo que he cogido de un desarrollo, así que funciona seguro.
Te he puesto las 2 rutas que utilizo cuando los desarrollos van sobre win 98 y sobre NT; utiliza que te vaya bien.
Por cierto, he tenido varios problemas con la versión 11 de la línea 100, con el driver ODBC en win 98.
Saludos y espero que te haya servido de algo.
Hola! Ya he probado lo que me has pasado y funciona. Ya no me casca, aunque de momento no me devuelve nada el código de error que me devuelve es 0, que creo que es el correcto. Investigaré un poco más.
Bueno, me llamo Carlos y trabajo en practicas en una empresa en Elche haciendo aplicaciones externas a SAGE, y estaría muy interesado si pudiera contactar contigo de una forma más directa, ya sea correo, teléfono o messenger. Bueno, sin ningún compromiso y muy agradecido
Carlos
PD.: Mi dirección de correo es:
[email protected]
Me alegro de que funcione. Mi nombre es Angel, y trabajo en un distribuidor de Sage en Barcelona (Process Control). Ahh, mi dirección de email es :
[email protected] -->particular
[email protected]
(Trabajo).
P.D. El correo lo leo bastante a menudo, aunque tarde algo en responder.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas