| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
clarur Novato

Registrado: Quarta-Feira, 27 de Julho de 2011 Mensagens: 20
|
Enviada: Seg Ago 22, 2011 3:59 pm Assunto: Problemas Com dll |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Ago 22, 2011 5:50 pm Assunto: |
|
|
e vc colocar o cod no proprio exe funciona?
pq na dll? |
|
| Voltar ao Topo |
|
 |
clarur Novato

Registrado: Quarta-Feira, 27 de Julho de 2011 Mensagens: 20
|
Enviada: Ter Ago 23, 2011 8:45 am Assunto: |
|
|
| 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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Ago 23, 2011 9:21 am Assunto: |
|
|
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 |
|
 |
clarur Novato

Registrado: Quarta-Feira, 27 de Julho de 2011 Mensagens: 20
|
Enviada: Ter Ago 23, 2011 9:45 am Assunto: |
|
|
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 |
|
 |
clarur Novato

Registrado: Quarta-Feira, 27 de Julho de 2011 Mensagens: 20
|
Enviada: Ter Ago 23, 2011 2:41 pm Assunto: |
|
|
| Alguem??????? |
|
| Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Ago 23, 2011 4:12 pm Assunto: |
|
|
Form.Parent := WebBrowser1; ??
é o contrario não?
WebBrowser1.Parent := Form; |
|
| Voltar ao Topo |
|
 |
clarur Novato

Registrado: Quarta-Feira, 27 de Julho de 2011 Mensagens: 20
|
Enviada: Ter Ago 23, 2011 4:36 pm Assunto: |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Ago 23, 2011 7:21 pm Assunto: |
|
|
mas o browser vai ficar dentro form
ou
o form vai ficar dentro do browser? |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Ter Ago 23, 2011 8:09 pm Assunto: |
|
|
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 |
|
 |
|