Ver Mensaje Individual
  #1603  
Antiguo 23-09-2021
Ramon88 Ramon88 is offline
Miembro
 
Registrado: ago 2021
Posts: 125
Reputación: 3
Ramon88 Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Pues he vuelto a probar lo que hay en el ZIP y me funciona.
Tienes la DLL, el EXE que la llama y el código fuente.


Puedes probar a hacer un proyecto nuevo con la llamada. Es sencillo:


Código Delphi [-]program testDLL; {$APPTYPE CONSOLE} {$R *.res} uses ShareMem, Vcl.forms, WinAPI.Windows, VCL.Dialogs, System.SysUtils; type TfunctionCRC8S = function(const AText:string): byte; TfunctionCRC8P = function(const AText:PAnsiChar): byte; var str, fName:String; b:byte; h:cardinal; fs:TfunctionCRC8S; fp:TfunctionCRC8P; begin // Nombre fName := ExtractFilePath(Application.ExeName) + 'crc8.dll'; // comprobamos si existe, si no existe ya no continuamos if not FileExists(fName) then raise Exception.Create('No se encuentra la DLL en: ' + sLineBreak + fName); // Cargar la DLL h := LoadLibrary(PChar(fName)); if (h < 32) then raise Exception.Create('No se ha podido cargar la DLL'); // buscar los métodos dentro de la DLL fs := GetProcAddress(h, 'crc8S'); fp := GetProcAddress(h, 'crc8P'); // Los ha encontrado if Assigned(fs) and Assigned(fp) then begin WriteLn('Escribir cadena de entrada o vacío para salir: '); ReadLn(Str); while (Str <> string.empty) do begin // Probarlo con parámetro string b := fs(Str); WriteLn('Cadena de entrada: ' + str); writeLn('Salida (string): ' + string.Format('%.3d',[b])); writeLn('-------------------------------'); // Parámetro AnsiChar b := fp(PAnsiChar(Str)); WriteLn('Cadena de entrada: ' + str); writeLn('Salida (PAnsiChar): ' + string.Format('%.3d',[b])); writeLn('-------------------------------'); writeln(' '); // vuelta a empezar... WriteLn('Escribir cadena de entrada o vacío para salir: '); readLn(Str); end; end; end.



¿Lo has probado con el EXE?
¿Estás llamando a la DLL desde otro lenguaje?

Si, lo estaba probando con .Net, agregando la dll como referencia para luego poder usarla, y ahí me daba el error.
Igual tengo que instalarlo como comenta ermendalenda. No obstannte voy a ver si funciona con la función que he encontrado, si no ya me lio a probar...


Gracias!
Responder Con Cita