Erro ao rodar DLL com Form e Memo

Delphi

21/03/2005

Olá pessoal, tudo bem?
Estou fazendo um editor bem simples, no Delphi 7, que será invocado por um programa escrito em Cobol. Para isso, criei uma DLL para tal função. O problema é que nos testes que estou fazendo, no próprio Delphi, ao chamar o Form que contém o editor aparece o seguinte erro:

Access violation at address 0036CD6E in module ´minhadll.dll´. Read of address 000002F8.

Abaixo inseri o trecho da função que existe dentro da dll.

function capxedit(s: String): String; stdcall; export;
var
TXT: TextFile;
RDR: String;
begin
AssignFile(TXT, s);
Reset(TXT);
FrmXEDITOR.MemoXEDITOR.Clear;
FrmXEDITOR.Show;
while not eof(TXT) do
begin
ReadLN(TXT, RDR);
FrmXEDITOR.MemoXEDITOR.Lines.Add(RDR);
end;
CloseFile(TXT);
end;

Exports
capxedit;

O erro dá no ponto da instrução:
FrmXEDITOR.MemoXEDITOR.Clear;

Declarei na Unit as cláusulas ShareMem, SysUtils e Classes, além da unit que está o form. Será que falta alguma cláusula na Unit para eu declarar?

Obrigado pelas dicas! :-)


Jorgeolimpia

Jorgeolimpia

Curtidas 0

Respostas

Biohazard

Biohazard

21/03/2005

Você está utilizando string como parâmetro, você tem que criar um tipo por exemplo:

type
tyString = string[255];

e na sua função declare assim:

function Exemplo(S: tyString) : tyString;

qualquer dúvida mande-me um email


GOSTEI 0
Kapak

Kapak

21/03/2005

Se vc utiliza strings como parâmetros de funções em dlls, vc tem que declarar Sharemem no uses dos dois .dpr e não na unit.


GOSTEI 0
Jorgeolimpia

Jorgeolimpia

21/03/2005

Caro BioHazard, tudo bem?
A questão da string é que ela existe ali só para capturar o txt que o programa vai enviar, ou seja, lá no Cobol vou executar o comando

CALL$ minhadll.dll ´capxedit(C:\teste\relatorio.txt)´

O caminho que está dentro do capxedit é o que vai para a string, aí faço aquela leitura básica do arquivo texto. Acredito que seja alguma rotina do form pois se troco por um ShowMessage() por exemplo, as linhas são mostradas uma a uma.

Obrigado pela dica!


GOSTEI 0
POSTAR