Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paladyno

Problemas com DLLs

Recommended Posts

Gente, estou escrevendo uma DLL e não consigo fazer a chamada de uma função que possui como parametro uma variavel do tipo IXMLNode.

 

DLL:

library Update;

uses
  SysUtils, Classes, XMLIntf;

{$R *.res}

function Copia(Node: IXMLNode; Const Mover: Boolean = false): Boolean;
var
  Path: String;
  Origem, Destino: File of byte;
  Lido, Escrito: Integer;
  Buffer: array[1..2048]of Char;
begin
  try
	Path := ExtractFilePath(Node.ChildNodes[2].NodeValue);
	if not DirectoryExists(Path) then
	  CreateDir(Path);
	AssignFile(Origem, Node.ChildNodes[1].NodeValue);
	AssignFile(Destino, Node.ChildNodes[2].NodeValue);
	Reset(Origem); Rewrite(Destino);
	repeat
	  BlockRead(Origem, Buffer, SizeOf(Buffer), Lido);
	  BlockWrite(Destino, Buffer, Lido, Escrito);
	until (Lido = 0) or (Lido <> Escrito);
	CloseFile(Origem); CloseFile(Destino);
	Result := True;
  except
	Result := false;
	Exit;
  end;
  if Mover then Result := DeleteFile(Node.ChildNodes[1].NodeValue);
  Result := Result and True;
end;

function Tratamento(Node: IXMLNode): Boolean;
begin
  Result := True;
  try
	Case StrToIntDef(Node.AttributeNodes[0].NodeValue, 0) of
	  1: Result := Copia(Node);
	  2: Result := Copia(Node, True);
	end;
  except
	Result := False;
  end;
  Result := Result and True;
end;

exports
  Tratamento;

begin

end.

Chamada:

...
var
  Funcao: function(Node: IXMLNode): Boolean;//
  DLL: THandle;
...
begin
...
  DLL := LoadLibrary('Update.DLL');
  if DLL <> 0 then begin
	@Funcao := GetProcAddress(DLL, 'Tratamento');
	if @Funcao <> nil then Funcao(Node);
	FreeLibrary(DLL);
  end;
Node do XML:

<arquivo id="1">
		<nome>ITEM</nome>
		<MIME>application/octet-stream</MIME>
		<tratamento tipo="01">
			<execute>Copiando</execute>
			<origem>C:\Update.dll</origem>
			<destino>C:\Update2.dll</destino>
		</tratamento>
	</arquivo>
Quando testei chamando uma função sem parametros deu certo. Alguém poderia me dar uma ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.