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

Registrado: Sexta-Feira, 14 de Abril de 2006 Mensagens: 6
|
Enviada: Ter Dez 22, 2009 10:21 am Assunto: ajuda com DLL - Resolvido!!! |
|
|
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 |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Ter Dez 22, 2009 2:54 pm Assunto: |
|
|
pergunta basica: qual erro? _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
Junior_82 Novato

Registrado: Sexta-Feira, 14 de Abril de 2006 Mensagens: 6
|
Enviada: Ter Dez 22, 2009 3:15 pm Assunto: |
|
|
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 |
|
 |
DonOctavioDelFlores Colaborador

Registrado: Quarta-Feira, 12 de Setembro de 2007 Mensagens: 2630 Localização: Pra lá de Bagda
|
Enviada: Ter Dez 22, 2009 3:54 pm Assunto: |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Dez 22, 2009 3:57 pm Assunto: |
|
|
| stdcal? |
|
| Voltar ao Topo |
|
 |
Junior_82 Novato

Registrado: Sexta-Feira, 14 de Abril de 2006 Mensagens: 6
|
Enviada: Qua Dez 23, 2009 9:37 am Assunto: |
|
|
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 |
|
 |
|