Problemas com DLL

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

[color=red:96beba4084]Título editado por Massuda Removido: ´(SOCORRO)´[/color:96beba4084]



Ermindo

Respostas

07/03/2006

Massuda

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


Responder Citar

07/03/2006

Ermindo

Sim, Em ambos Projetos estah declarado a ShareMem na USES


Responder Citar

07/03/2006

Massuda

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).


Responder Citar

09/03/2006

Ermindo

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.


Responder Citar

09/03/2006

Massuda

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.


Responder Citar

09/03/2006

Ermindo

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?


Responder Citar

09/03/2006

Massuda

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?


Responder Citar

09/03/2006

Martins

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!!


Responder Citar

09/03/2006

Martins

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]?


Responder Citar

09/03/2006

Ermindo

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


Responder Citar

09/03/2006

Martins

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


Responder Citar

09/03/2006

Ermindo

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


Responder Citar

09/03/2006

Massuda

...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.


Responder Citar

09/03/2006

Martins

[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!!!


Responder Citar

09/03/2006

Martins

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!!!


Responder Citar