Access violation con una DLL de C
Voy avanzando con el tema de las llamadas a las DLL, pero me ecuentro con problemas a la hora de pasar los parametros a las funciones, alguien me puede ayudar.
Codigo Delphi Código Delphi [-] ...... Function pasar( var message_buf:char;var message_len:integer;var relleno:char): integer;stdcall;external 'libreria.dll'; [los parametros son in y de out a la vez]; </SPAN> ..... Procedure Tform1.enviar; var message_buf:array[0..2048] of char; var message_len : Integer; var relleno : char; begin message_buf :=FillChar(message_buf, SizeOf(message_buf), Ord('0')); message_len :=Sizeof(message_buf); relleno :='A'; nValor:=Pasar( pchar(message_buf),message_len,caracter ); <<<- access violation error ShowMessage( message_buf ); ShowMessage( IntToStr(message_len ) ); ShowMessage( relleno ); end; El punto c.h dice asi: Código Delphi [-] CI_API int CI_CALL Pasar(char *pszMessg, int * piLen, char *pbMessgPending); ========================================================= Programa C Código Delphi [-] long rc char message_buf[2048]; int message_len = 0; char relleno; message_len = sizeof(message_buf); result = Pasar( message_buf, &message_len, &relleno); If (result = 0 ) { message_buf[message_len]= '\0'; Printf( message_buf); Printf( message_len); Printf( relleno); } ========================================================= y otra cosa las las funciones que son de este tipo ver(void), ¿ que tipo de variable tengo que pasarles desde Delphi.? Siento el 'tocho' y gracias anticipadas. Juan. PD: Si conoceis algun enlace que explicara como indicar en delphi las variables, os lo agradeceria. |
Yo empezaría desde lo más fácil e ir complicándolo, paso a paso
primero: Probar una rutina sin parámetros despues, probar una rutina con 1 parámetro sencillo (por ejemplo, integer) después, probar una rutina con varios parámetros después, probar una rutina con paso de punteros después, probar una rutina con devolución de valor Por cierto, void indica que no hay parámetros. C: void Rutina (void); Delphi : procedure Rutina (); |
|
Muy Biennnn Basti, ha funcionado 1000%, jeje... no encuentro ningun icono para hacer la ola......
Muchas gracias, y también a mensana por su respuesta. |
La franja horaria es GMT +2. Ahora son las 15:10:27. |
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