Cita:
Empezado por Ramon88
No puedo usar la DLL.
Error:
Asegurese de que tiene acceso al archivo y de que es un ensamblado o componente COM válido.
|
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
fName := ExtractFilePath(Application.ExeName) + 'crc8.dll';
if not FileExists(fName) then
raise Exception.Create('No se encuentra la DLL en: ' + sLineBreak + fName);
h := LoadLibrary(PChar(fName));
if (h < 32) then
raise Exception.Create('No se ha podido cargar la DLL');
fs := GetProcAddress(h, 'crc8S');
fp := GetProcAddress(h, 'crc8P');
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
b := fs(Str);
WriteLn('Cadena de entrada: ' + str);
writeLn('Salida (string): ' + string.Format('%.3d',[b]));
writeLn('-------------------------------');
b := fp(PAnsiChar(Str));
WriteLn('Cadena de entrada: ' + str);
writeLn('Salida (PAnsiChar): ' + string.Format('%.3d',[b]));
writeLn('-------------------------------');
writeln(' ');
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?