Array
(
)

Problemas com DLL

Ermindo
   - 07 mar 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


Citação:
Título editado por Massuda

Removido: ´(SOCORRO)´



Massuda
   - 07 mar 2006


Citação:
library Lib;

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


Ermindo
   - 07 mar 2006

Sim, Em ambos Projetos estah declarado a ShareMem na USES


Massuda
   - 07 mar 2006


Citação:
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).


Ermindo
   - 09 mar 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.


Massuda
   - 09 mar 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.


Ermindo
   - 09 mar 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?


Massuda
   - 09 mar 2006

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


Martins
   - 09 mar 2006


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


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


Martins
   - 09 mar 2006

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

Seria o erro: RunTime Error 217 at 00413E14?


Ermindo
   - 09 mar 2006

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


Martins
   - 09 mar 2006


Citação:
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


Ermindo
   - 09 mar 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


Massuda
   - 09 mar 2006


Citação:
...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.


Martins
   - 09 mar 2006


Citação:

Citação:
...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.


Verdade Massuda, acredito q o nosso colega não colocou no DPR e sim no PAS.

Valew!!!


Martins
   - 09 mar 2006


Citação:
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:

#Código


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.



#Código

program Project1;

uses
ShareMem, Forms,
Unit1 in ´Unit1.pas´ {Form1};

{$R *.res}

begin
Application.Initialize;

Aqui pode usar q não tem erro algum.

Boa sorte!!!


Ermindo
   - 09 mar 2006

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

Obrigado Pela ajuda!!


Att

Ermindo..


Martins
   - 09 mar 2006


Citação:
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!!