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 

ajuda com DLL - Resolvido!!!

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


Registrado: Sexta-Feira, 14 de Abril de 2006
Mensagens: 6

MensagemEnviada: Ter Dez 22, 2009 10:21 am    Assunto: ajuda com DLL - Resolvido!!! Responder com Citação

Seguinte:

Estou fazendo uma DLL que altera uma chave no registro. O problema em alterar a chave no registro esta resolvido.. mas nao estou conseguindo chamar a procedure desta DLL através de outra aplicação... quando clico no botão sempre estoura erro...

Segue codigo da minha DLL:

Código:

library EscritorRegistro;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils, Registry, Windows, Messages, Variants, Graphics, Controls,
  Dialogs, StdCtrls, Classes;



{$R *.res}

var Reg : TRegistry;

procedure WriterRegistry(porta : string); stdcall; export;
begin

Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
  if Reg.OpenKey('CONF_CONT_ERG', true) then
          begin
            Reg.WriteString('Porta', 'COM5');
            Reg.LazyWrite := False; // força a gravação direta no registro
            Reg.CloseKey;
          end;

end;

exports
WriterRegistry index 1;

begin
end.


O codigo do form que estou testando a DLL segue abaixo:

Código:

unit testandoDLL;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Registry;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Reg : TRegistry;

implementation

{$R *.dfm}

procedure WriterRegistry(porta:string); external 'EscritorRegistro.dll' index 1;

procedure TForm1.Button1Click(Sender: TObject);
var porta:string;


begin
  WriterRegistry(porta);
end;

end.


Se alguém puder me dar uma força...

Abraço!


Editado pela última vez por Junior_82 em Qua Dez 23, 2009 9:39 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Ter Dez 22, 2009 2:54 pm    Assunto: Responder com Citação

pergunta basica: qual erro?
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Junior_82
Novato
Novato


Registrado: Sexta-Feira, 14 de Abril de 2006
Mensagens: 6

MensagemEnviada: Ter Dez 22, 2009 3:15 pm    Assunto: Responder com Citação

opa...

cara.. na hora que clico no botão em que ele deveria rodar a procedure, estoura um erro de EAccess Violation...

"Eaccess violation at 0x00403e22: write of adress 0x0044d980"

a partir daí, ele entra em debuger e preciso resetar o Programa.

nao sei o que pode estar ocorrendo...

Valeu...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
DonOctavioDelFlores
Colaborador
Colaborador


Registrado: Quarta-Feira, 12 de Setembro de 2007
Mensagens: 2630
Localização: Pra lá de Bagda

MensagemEnviada: Ter Dez 22, 2009 3:54 pm    Assunto: Responder com Citação

debug?

pra debugar a DLL é só ir em Run->Parameters->Host Application.
_________________
“The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart
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 Dez 22, 2009 3:57 pm    Assunto: Responder com Citação

stdcal?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Junior_82
Novato
Novato


Registrado: Sexta-Feira, 14 de Abril de 2006
Mensagens: 6

MensagemEnviada: Qua Dez 23, 2009 9:37 am    Assunto: Responder com Citação

Bah.. pessoal...

Desculpa aí.. ficou faltando o stdcall na declaração da procedure na aplicação de teste...

valeu gilson...

Obrigado por tudo ai pessoal.. Resolvido
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
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