Problemas com DLL

Delphi

07/03/2006

Pessoal, Criei um simples projeto para ilustrar meu problema.
Estou Fazendo uma chamada dinamica a uma dll, e na hora de dar um close, no form principal, o delphi me retorna Invalid pointer operation ....., detalhe, isso ocorre apenas em design-time

estou rodando apenas essa rotina no form principal:

procedure TForm1.Button1Click(Sender: TObject);
var HD: THandle;
proc :function:string; stdcall;
mEmpresa:string;
begin

HD:= LoadLibrary(´lib.dll´);
if HD <> 0 then
begin

@proc := GetProcAddress(hd, ´Empresa´);
if @proc <> nil then
mEmpresa:=proc;

freelibrary(HD);

end;

showmessage(mEmpresa);

end;


minha DLL estah com o seguinte codigo:


library Lib;

uses
ShareMem,
SysUtils,
Dialogs,
Classes;

{$R *.res}

function Empresa:string;Stdcall;
begin
result:=´ViP Computadores´;
end;

exports
Empresa name ´Empresa´;

begin


end.


Alguem poderia me Ajudar??

Grato
ATT
Ermindo Lopes

[quote:96beba4084=´Moderação´][color=red:96beba4084]Título editado por Massuda

Removido: ´(SOCORRO)´[/color:96beba4084][/quote:96beba4084]


Ermindo

Ermindo

Curtidas 0

Respostas

Massuda

Massuda

07/03/2006

library Lib; uses ShareMem,
Você incluiu o ShareMem também no DPR do programa que usa a DLL?


GOSTEI 0
Ermindo

Ermindo

07/03/2006

Sim, Em ambos Projetos estah declarado a ShareMem na USES


GOSTEI 0
Massuda

Massuda

07/03/2006

Sim, Em ambos Projetos estah declarado a ShareMem na USES
Estranho... Comigo só dá erro de Invalid Pointer ao fechar o form se eu retirar o ShareMem do uses (lembrando que o ShareMem precisa ser o primeiro da lista de uses).


GOSTEI 0
Ermindo

Ermindo

07/03/2006

massuda,
Vc disse q quando vc usa o loadlibrary, funciona normalmente. tem como vc disponibilizar um formezinho de exemplo, chamando uma procedure de uma dll com loadlibrary .

[]´s

ATT Ermindo.


GOSTEI 0
Massuda

Massuda

07/03/2006

Usei seu próprio exemplo, a única coisa que fiz e que não está no seu exemplo foi incluir o ShareMem no uses do DPR do programa.


GOSTEI 0
Ermindo

Ermindo

07/03/2006

Massuda, eu estou usando tanto pra desenvolver quanto pra testar, wum win 2000 server Sp4 , serah q pode ser isso? alguma incompatibilidade? jah ouviu falar algo assim?


GOSTEI 0
Massuda

Massuda

07/03/2006

Acho difícil ser algum ´bug do Windows´... uma coisa que não entendi no seu post inicial foi...
isso ocorre apenas em design-time
...o que você quis dizer com isso?


GOSTEI 0
Martins

Martins

07/03/2006

Acho difícil ser algum ´bug do Windows´... uma coisa que não entendi no seu post inicial foi...[quote:ab629680ba]isso ocorre apenas em design-time
...o que você quis dizer com isso?[/quote:ab629680ba]

Será q o colega quis dizer q isso só acontece em tempo de projeto, quando o mesmo é rodado pelo RUN do Delphi?

Vamos esperar pela resposta dele, pois testei aqui o exemplo dele e normal aqui.

Boa sorte!!


GOSTEI 0
Martins

Martins

07/03/2006

O erro ao qual o colega se refere ocorre ao fehcar a aplicação?

Seria o erro: [b:76652c747b][color=red:76652c747b]RunTime Error 217 at 00413E14[/color:76652c747b][/b:76652c747b]?


GOSTEI 0
Ermindo

Ermindo

07/03/2006

Exatamente,
depois do invalipointer, e dal o runtime error 217 oq seria?


GOSTEI 0
Martins

Martins

07/03/2006

Exatamente, depois do invalipointer, e dal o runtime error 217 oq seria?


Teoricamente está relacionado a inclusão de ShareMem no form, faça um teste, inclua ShareMem em uma aplicação nova e depois clique em fechar, vai ser apresentado o mesmo erro, só não entendo pq, vou ter q pesquisar.

boa sorte


GOSTEI 0
Ermindo

Ermindo

07/03/2006

intendi, intaum teoricamente, assim como o massuda disssi, o codigo estah ok, porem a porcaria da sharemem q tah dando pau!, vou testar em outro Sistema operacional, pra ver c ocorre a mesma coisa.

vlw


GOSTEI 0
Massuda

Massuda

07/03/2006

...inclusão de ShareMem no form...
O ShareMem deve ser posto no uses do DPR do projeto (Project|View Source), não na unit do form, e deve ser o primeiro na lista de uses.


GOSTEI 0
Martins

Martins

07/03/2006

[quote:7473bba496=´Martins´]...inclusão de ShareMem no form...
O ShareMem deve ser posto no uses do DPR do projeto (Project|View Source), não na unit do form, e deve ser o primeiro na lista de uses.[/quote:7473bba496]

Verdade [b:7473bba496]Massuda[/b:7473bba496], acredito q o nosso colega não colocou no DPR e sim no PAS.

Valew!!!


GOSTEI 0
Martins

Martins

07/03/2006

intendi, intaum teoricamente, assim como o massuda disssi, o codigo estah ok, porem a porcaria da sharemem q tah dando pau!, vou testar em outro Sistema operacional, pra ver c ocorre a mesma coisa. vlw


:)

Sim, o erro ocorre se vc colocar o ShareMem no seu Pas, pois ele deve ficar no arquivo Dpr ok!

Exemplo:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)


nada de ShareMem no código acima, pois é um arquivo Pas.



program Project1;

uses
  ShareMem, Forms,
  Unit1 in ´Unit1.pas´ ;

{$R *.res}

begin
  Application.Initialize;

Aqui pode usar q não tem erro algum.

Boa sorte!!!


GOSTEI 0
Ermindo

Ermindo

07/03/2006

Galera realmente era isso. Estava declarando no form em vez de declarar no DPR, funcionou certinho.

Obrigado Pela ajuda!!


Att

Ermindo..


GOSTEI 0
Martins

Martins

07/03/2006

Galera realmente era isso. Estava declarando no form em vez de declarar no DPR, funcionou certinho. Obrigado Pela ajuda!! Att Ermindo..


Blz, agora manda ver lá no seu sistema.

boa sorte!!


GOSTEI 0
POSTAR