Problemas com DLL
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]
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
Curtidas 0
Respostas
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
07/03/2006
Sim, Em ambos Projetos estah declarado a ShareMem na USES
GOSTEI 0
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
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.
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
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
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
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
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
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]?
Seria o erro: [b:76652c747b][color=red:76652c747b]RunTime Error 217 at 00413E14[/color:76652c747b][/b:76652c747b]?
GOSTEI 0
Ermindo
07/03/2006
Exatamente,
depois do invalipointer, e dal o runtime error 217 oq seria?
depois do invalipointer, e dal o runtime error 217 oq seria?
GOSTEI 0
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
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
vlw
GOSTEI 0
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
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
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
07/03/2006
Galera realmente era isso. Estava declarando no form em vez de declarar no DPR, funcionou certinho.
Obrigado Pela ajuda!!
Att
Ermindo..
Obrigado Pela ajuda!!
Att
Ermindo..
GOSTEI 0
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