ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Problemas Com dll

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
clarur
Novato
Novato


Registrado: Quarta-Feira, 27 de Julho de 2011
Mensagens: 20

MensagemEnviada: Seg Ago 22, 2011 3:59 pm    Assunto: Problemas Com dll Responder com Citação

Pessoal, preciso de vocês novamente!

Estou fazendo uma dll que tem como função chamar um webbrowser para que eu possa salvar o codigo fonte de uma pagina e salva-lo em um txt. Caso o txt seja criado com sucesso ele retorna true senão ele retorna false.
Fiz um programinha no delphi só para chamar essa dll para ver se estava funcionando legal. O problema é que quando eu mando ele chamar a dll não da nada. Não sei o que fiz de errado. Vocês podem me ajudar? Essa é a minha primeira dll, então estou ficando loko com ela! ^^

Código dll - Projeto
uses
SysUtils,
Classes,
Dialogs,
Browser in 'Browser.pas' {Form1};

procedure ConsultaNFE() stdcall; Export;
var
Consulta : Boolean;
begin
Form1.ShowModal;
Consulta := result;
end;

Exports ConsultaNFE;

Código dll - Browser
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
S := WebBrowser1.Document;
Local := 'C:\ConsultaNFE.txt';
AssignFile(Arq, 'C:\ConsultaNFE.txt');

if not FileExists(local) then
begin
result := false;
end
else
begin
Rewrite(Arq);
Write(Arq, S.Body.OuterHTML);
Reset(Arq);
erro := 0;
erro2 := 0;

while not eof(Arq) do
begin
Readln(Arq, Linha);
erro := Pos('inválido', Trim(Linha));
erro2 := erro2 + erro;
if erro2 > 0 then
result := false
else
result := true;
end;

if result = false then
Rewrite(Arq);

CloseFile(Arq);
end;
end;

Código do programinha para testar dll
var
form1: tform1;
result : Boolean;

function ConsultaNFE():Boolean stdcall; external 'P_ConsultaNFE.dll';

implementation

{$r *.dfm}
procedure tform1.button1click(sender: tobject);
begin
result := ConsultaNFE();

if result = true then
showmessage('OK')
else
showmessage('ERRO');
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Seg Ago 22, 2011 5:50 pm    Assunto: Responder com Citação

e vc colocar o cod no proprio exe funciona?

pq na dll?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
clarur
Novato
Novato


Registrado: Quarta-Feira, 27 de Julho de 2011
Mensagens: 20

MensagemEnviada: Ter Ago 23, 2011 8:45 am    Assunto: Responder com Citação

sim, testei ela como exe e funcionou perfeitamente. Só que na dll não! parece que a dll não esta chamando o form e nem os seus componentes. :/ Preciso fazer em dll, pq a empresa me pediu em dll. aff ¬¬'
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Ago 23, 2011 9:21 am    Assunto: Responder com Citação

mas vc instanciou o form1 onde?

pq vc só chama ele.

vc não ta achando q form1 na dll é mesmo form1 no exe. né?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
clarur
Novato
Novato


Registrado: Quarta-Feira, 27 de Julho de 2011
Mensagens: 20

MensagemEnviada: Ter Ago 23, 2011 9:45 am    Assunto: Responder com Citação

Pessoal fiz assim:
Eu criei o form com o componente webbrowser direto na mão pela dll, funcionou legal, só não estou conseguindo receber o resultado (true ou false). O código da dll ficou assim:

procedure ShowForm; export; stdcall;
begin
//cria o form
Form := TForm.Create(Application);
Form.Caption := 'Consulta Nfe - Completa';
//cria browser
WebBrowser1 := tWebBrowser.Create(Form);
WebBrowser1.Navigate('http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=');
WebBrowser1.Left := 10;
WebBrowser1.Top := 10;
WebBrowser1.Width := 800;
WebBrowser1.Height := 800;
Form.Parent := WebBrowser1;
//chama o form
Form.Position := poDesktopCenter;
Form.ShowModal;
Form.Free;
end;

procedure WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant) export; stdcall;
begin
S := WebBrowser1.Document;
Local := 'C:\ConsultaNFE.txt';

if not FileExists(local) then
begin
AssignFile(Arq, 'C:\ConsultaNFE.txt');
result := false;
end
else
begin
Rewrite(Arq);
Write(Arq, S.Body.OuterHTML);
Reset(Arq);
erro := 0;
erro2 := 0;

while not eof(Arq) do
begin
Readln(Arq, Linha);
erro := Pos('inválido', Trim(Linha));
erro2 := erro2 + erro;
if erro2 > 0 then
result := false
else
result := true;
end;

if result = false then
Rewrite(Arq);

CloseFile(Arq);
end;
end;

exports ShowForm, WebBrowser1DocumentComplete;



Como faço para enviar e receber a variavel "result" ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
clarur
Novato
Novato


Registrado: Quarta-Feira, 27 de Julho de 2011
Mensagens: 20

MensagemEnviada: Ter Ago 23, 2011 2:41 pm    Assunto: Responder com Citação

Alguem???????
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Ago 23, 2011 4:12 pm    Assunto: Responder com Citação

Form.Parent := WebBrowser1; ??

é o contrario não?


WebBrowser1.Parent := Form;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
clarur
Novato
Novato


Registrado: Quarta-Feira, 27 de Julho de 2011
Mensagens: 20

MensagemEnviada: Ter Ago 23, 2011 4:36 pm    Assunto: Responder com Citação

Pior que não! Tentei dessa forma e não funfo. Ai só por curiosidade inverti, ai funcionou! O.O

Vai entender!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Ago 23, 2011 7:21 pm    Assunto: Responder com Citação

mas o browser vai ficar dentro form
ou

o form vai ficar dentro do browser?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Ter Ago 23, 2011 8:09 pm    Assunto: Responder com Citação

Vc pode usar tb indy com o componente idhttp, idcookiemanager e idiohandler e indy 10.5.8 para fazer esta consulta, claro que é bem mais complexo, mas funciona perfeitamente.
Com a Indy abaixo disto fica mais difícil devido ter de fazer o controle de cookies manualmente.



bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB