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! [As partes desta mensagem que não continham texto foram removidas]