Problemas com DLL

07/03/2006

0

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

Responder

Posts

07/03/2006

Massuda

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


Responder

07/03/2006

Ermindo

Sim, Em ambos Projetos estah declarado a ShareMem na USES


Responder

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

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

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

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

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

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

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

09/03/2006

Ermindo

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


Responder

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

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

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

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

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar