RE: [delphi-br] Ajuda array dinamico DLL

2010-01-13 Por tôpico Rubem Nascimento da Rocha

Quando utilizamos arrays dinâmicos do Delphi como parâmetros em funções de uma 
DLL, estes são tratados como ponteiros. Seu eu fosse vc, empacotaria essa sua 
rotina utilitária em um package. Com o package, você poderá declarar funções e 
rotinas que possam lidar tranquilamente tanto com arrays dinâmicos como com 
tipos de dados customizados criados por vc.

 

Boa sorte.

Sds.
 


To: delphi-br@yahoogrupos.com.br
From: evaldoave...@yahoo.com.br
Date: Wed, 13 Jan 2010 05:50:45 -0800
Subject: [delphi-br] Ajuda array dinamico DLL

  



Bom dia!

Estou com problemas em uma função de uma dll que estou criando.
A função recebe um array dinamico de um tipo de dado.

De acordo com a quantidade de informação, a dll altera o tamanho e preenche o 
array.

Na aplicação pego o array e passo para outra função preencher preencher um item 
de um Mainmenu. 
consigo acessar e usar os dados do array que a dll alterou sem erros. 

Mas depois, quando a aplicação já carregou, quando eu clico no item que 
adicionei para o main menu a aplicação da um acess vilation. Percebi que se eu 
não acesso nenhuma posicição do array que veio da dll, dentro da função, o erro 
não ocorre.
Por exemplo :

procedure TForm1.ADDToMenu(var Lista: TListaMenuDLL);
begin
if length(Lista) = 0 then
exit;

Menu.caption := lista[i].caption //ocorre erro depois que a aplicação foi 
carregada
end;

procedure TForm1.ADDToMenu(var Lista: TListaMenuDLL);
begin
if length(Lista) = 0 then
exit;

Menu.caption :='Teste' //sem erro 
end;

Pesquisando, descobrir que se a dll aloca memória, ela também destrói. Eu 
mantenho a dll na memória enquanto eu monto menu, só depois ela é liberada. 

Mas eu não estou mais apontando para o array que a dll alocou, então o erro nao 
deveria ocorrer.

Função da dll que me retorna o que preciso:

procedure MenuDLL(var Lista: TListaMenuDLL); stdcall ;
var Item : TMenuDLL;
begin

item := TMenuDLL.Create('DLL','FunçõesCliente');
item.Caption := 'DLL Funções de Clientes';
SetLength( Lista ,( length(lista)+1) );
Lista[length(lista)-1] := (item);

item := TMenuDLL.Create('DLL','CadastroCliente');
item.Caption := 'Cadastro de Cliente';
SetLength(Lista,length(lista)+1 );
Lista[length(lista)-1] := (item);
end;

//Array

type TListaMenuDLL = array of TMenuDLL;

//Tipo de dado
TMenuDLL = record
AssinaturaFuncao: string;
NomeDLL: string;
Caption: string;
end;

uso o delphi 2007

Se aguém puder dar alguma sugestão, Obrigado!

  
_
Deixe seu computador compatível com a sua vida. Clique para conhecer o Windows 
7!
http://www.microsoft.com/brasil/windows7/default.html?WT.mc_id=1539

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] Ajuda array dinamico DLL

2010-01-13 Por tôpico Willian Jhonnes L. dos Santos
Olá, Evaldo...

 TMenuDLL = record
 AssinaturaFuncao: string;
 NomeDLL: string;
 Caption: string;
 end;


 

Bem, pra começar, que tal você trocar essas Strings por WideStrings??? 
Variáveis do tipo String realmente dão problemas em DLLs...

-- 

---
Att.:
Willian Jhonnes L. dos Santos
Analista/Desenvolvedor Object/Free Pascal
willianjhon...@yahoo.com.br
---
Seja livre. Use Linux.
Grupo de Usuários GNU/Linux de São José dos Pinhais
Linux user number 449753
---
Powered by Slackware Linux 12.2
Kernel 2.6.27.8-i686-core2
---



[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] Ajuda array dinamico DLL

2010-01-13 Por tôpico Evaldo
Obrigado, mas preciso usar dll por causa de uma futura migração para C#.





From: Rubem Nascimento da Rocha djpardalro...@hotmail.com
To: delphi-br delphi-br@yahoogrupos.com.br
Sent: Wed, January 13, 2010 12:05:20 PM
Subject: RE: [delphi-br] Ajuda  array dinamico DLL

  

Quando utilizamos arrays dinâmicos do Delphi como parâmetros em funções de uma 
DLL, estes são tratados como ponteiros. Seu eu fosse vc, empacotaria essa sua 
rotina utilitária em um package. Com o package, você poderá declarar funções e 
rotinas que possam lidar tranquilamente tanto com arrays dinâmicos como com 
tipos de dados customizados criados por vc.

Boa sorte.


  

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] Ajuda array dinamico DLL

2010-01-13 Por tôpico Evaldo
Obrigado! vou tentar isso.

 




From: Willian Jhonnes L. dos Santos willianjhon...@yahoo.com.br
To: delphi-br@yahoogrupos.com.br
Sent: Wed, January 13, 2010 1:09:41 PM
Subject: Re: [delphi-br] Ajuda  array dinamico DLL

  
Olá, Evaldo...

 TMenuDLL = record
 AssinaturaFuncao: string;
 NomeDLL: string;
 Caption: string;
 end;


 

Bem, pra começar, que tal você trocar essas Strings por WideStrings? ?? 
Variáveis do tipo String realmente dão problemas em DLLs...


  

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] Ajuda array dinamico DLL

2010-01-13 Por tôpico Evaldo
Deu certinho com WideStrings!

Muito obrigado!

 






From: Evaldo evaldoave...@yahoo.com.br
To: delphi-br@yahoogrupos.com.br
Sent: Wed, January 13, 2010 1:50:17 PM
Subject: Re: [delphi-br] Ajuda  array dinamico DLL

  
Obrigado! vou tentar isso.

 _ _ __
From: Willian Jhonnes L. dos Santos willianjhonnes@ yahoo.com. br
To: delphi...@yahoogrup os.com.br
Sent: Wed, January 13, 2010 1:09:41 PM
Subject: Re: [delphi-br] Ajuda  array dinamico DLL

Olá, Evaldo...

 TMenuDLL = record
 AssinaturaFuncao: string;
 NomeDLL: string;
 Caption: string;
 end;


 

Bem, pra começar, que tal você trocar essas Strings por WideStrings? ?? 
Variáveis do tipo String realmente dão problemas em DLLs...

[As partes desta mensagem que não continham texto foram removidas]


 


  

[As partes desta mensagem que não continham texto foram removidas]



RE: [delphi-br] Ajuda array dinamico DLL

2010-01-13 Por tôpico Rubem Nascimento da Rocha

Se pensa em migrar pra C#, a melhor coisa a fazer é fazer essa DLL do tipo COM. 
Vai faciliar mais ainda.

Sds.

 


To: delphi-br@yahoogrupos.com.br
From: evaldoave...@yahoo.com.br
Date: Wed, 13 Jan 2010 07:49:28 -0800
Subject: Re: [delphi-br] Ajuda array dinamico DLL

  



Obrigado, mas preciso usar dll por causa de uma futura migração para C#.


From: Rubem Nascimento da Rocha djpardalro...@hotmail.com
To: delphi-br delphi-br@yahoogrupos.com.br
Sent: Wed, January 13, 2010 12:05:20 PM
Subject: RE: [delphi-br] Ajuda array dinamico DLL

Quando utilizamos arrays dinâmicos do Delphi como parâmetros em funções de uma 
DLL, estes são tratados como ponteiros. Seu eu fosse vc, empacotaria essa sua 
rotina utilitária em um package. Com o package, você poderá declarar funções e 
rotinas que possam lidar tranquilamente tanto com arrays dinâmicos como com 
tipos de dados customizados criados por vc.

Boa sorte.

  
_
Sabia que você tem 25Gb de armazenamento grátis na web? Conheça o Skydrive 
agora.
http://www.windowslive.com.br/public/product.aspx/view/5?ocid=CRM-WindowsLive:produtoSkyDrive:Tagline:WLCRM:On:WL:pt-BR:SkyDrive

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] Ajuda array dinamico DLL

2010-01-13 Por tôpico Evaldo


Muito obrigado pela sugestão! Vai ser de grande valia.






From: Rubem Nascimento da Rocha djpardalro...@hotmail.com
To: delphi-br delphi-br@yahoogrupos.com.br
Sent: Wed, January 13, 2010 1:56:15 PM
Subject: RE: [delphi-br] Ajuda  array dinamico DLL

  

Se pensa em migrar pra C#, a melhor coisa a fazer é fazer essa DLL do tipo COM. 
Vai faciliar mais ainda.

Sds.

To: delphi...@yahoogrup os.com.br
From: evaldoavelar@ yahoo.com. br
Date: Wed, 13 Jan 2010 07:49:28 -0800
Subject: Re: [delphi-br] Ajuda array dinamico DLL

Obrigado, mas preciso usar dll por causa de uma futura migração para C#.

 _ _ __
From: Rubem Nascimento da Rocha djpardalrocha@ hotmail.com
To: delphi-br delphi...@yahoogrup os.com.br
Sent: Wed, January 13, 2010 12:05:20 PM
Subject: RE: [delphi-br] Ajuda array dinamico DLL

Quando utilizamos arrays dinâmicos do Delphi como parâmetros em funções de uma 
DLL, estes são tratados como ponteiros. Seu eu fosse vc, empacotaria essa sua 
rotina utilitária em um package. Com o package, você poderá declarar funções e 
rotinas que possam lidar tranquilamente tanto com arrays dinâmicos como com 
tipos de dados customizados criados por vc.

Boa sorte.


 _ _ _ _ _ _
Sabia que você tem 25Gb de armazenamento grátis na web? Conheça o Skydrive 
agora.
http://www.windowsl ive.com.br/ public/product. aspx/view/ 5?ocid=CRM- 
WindowsLive: produtoSkyDrive: Tagline:WLCRM: On:WL:pt- BR:SkyDrive

[As partes desta mensagem que não continham texto foram removidas]


 


  

[As partes desta mensagem que não continham texto foram removidas]