Alguem tem o IOport ?

Delphi

02/05/2003

OLa !


Se alguem tiver o ioport para delphi 6 que relamente funcione pode me madar por favor ?


Grato Eduardo


Evdias

Evdias

Curtidas 0

Respostas

Tpoeta

Tpoeta

02/05/2003

Pega o ioPort em [url]http://www.delphi.eti.br/[/url]

Agora pra ele funcionar é outro esquema, andei olhando pela net e vi um artigo falando sobre isso... deixa eu repassá-lo...

[i:f64d9c97fe]Caso 1 - Para Delphi até versão 5

O primeiro caso, é que se você estiver rodando o Delphi até versão 5, então o problema é que o arquivo não está sendo mensionado no seu diretório de Library´s.

Resolva isso da seguinte forma:

Clique no Menu Tools, depois siga Environment Options->Selecione a guia Library e depois clique no botão para adicionar um novo Library Path.

Escreva $(DELPHI)SourceToolsAPI na caixa abaixo e depois clique am Add Dê Ok, e tente compilar o package novamente.

Caso2 - Delphi 6 e Delphi7

Ok, esse é o caso mais comum que existe.

Se você está usando uma versão mais nova do Delphi, provavelmente está tentando compilar um pacote que foi desenvolvido em uma versão antiga do Delphi.

Acontece, que a Borland deu uma ´mancada´ e mudou o nome do arquivo dsgnIntf.pas para Designintf.pas alegando ter motivos relacionados com a mudança na estrutura do próprio Delphi, e devido ao novo tipo de implementação da biblioteca de componentes inter-plataforma da Borland.

Assim sendo, se o seu pacote refere-se ao arquivo antigo (veja abaixo):

Uses
Windows, dsgnIntf, Forms etc

Nota: Você localizará facilmente qual arquivo se refere a ele, pois será o arquivo *.pas que vai dar o erro ... doohh!

E não adianta ir até este local e mudar só o nome do arquivo para algo do tipo:

Uses
Windows, Designintf, Forms etc

O problema é um pouco mais extenso, pois algumas funções foram movidas para outros lugares também.

O editor de propriedades por exemplo, foi parar numa unidade de nome DesignEditors.pas a as constantes foram parar juntamente com os menus em DesignMenus.pas e também as variantes foram de System.pas para a unidade de variantes Variants.pas

Se olharmos bem, veremos que foi uma forma da Borland dar uma ´organizada na casa´ emboras tenha sido omissa, na hora que deveria ter divulgado isso bem claro para os usuários, ou ainda na hora em que o Delphi afirma que está convertendo um package de uma versão antiga, para uma versão mais nova, deveria arrumar isso também automaticamente.

Mas bugs e mancadas à parte, vamos ao que interessa, A solução:
Vá até o arquivo que registra os componentes (O arquivo que está dando o erro).

Localize neste arquivo o local onde ele chama o arquivo dsgnIntf

Ex: Uses
Windows, Designintf, Forms etc

Agora, apague a entrada dsgnIntf e substitua por essas outras entradas:

-Designintf, DesignEditors, DesignMenus, Variants

Desta forma o nosso exemplo acima ficaria assim agora:

-Ex: Uses
Windows, Designintf, DesignEditors, DesignMenus, Variants, Forms etc

Nota: Cuidado pra não duplicar as entradas, verifique se o arquivo que você já está editando não contém por exemplo Variants na entrada Uses

Pronto, Isso deverá resolver o seu Problema.[/i:f64d9c97fe]

Aproveitando, se vc tem um windows com tecnologia NT, vc vai precisar de um programazinho para inibir a proteção da porta paralela, pegue em [url]www.rogercom.com[/url]

Espero que lhe ajude em algo. :roll:


GOSTEI 0
Tpoeta

Tpoeta

02/05/2003

pode pegar o ioport também em [url]http://www.carlosnaves.com/delphi.php[/url]


GOSTEI 0
Dopi

Dopi

02/05/2003

Nao se ajuda...

No projeto ACBr precisei usar a comunicação direta com a Porta AT do teclado para exibir msg em Teclados com Display (www.gertec.com.br)

Achei na NET uma funçao em Assembler para fazer a comunicação com as portas... Functiona bem no 98 mas no XP/NT como mencionado precisa de device drivers que ´quebrem´ o bloqueio do S.O.

O projeto ACBr tb é compativel com Linux, porém a instrução em Assembler não roda no Linux... então efetuando várias pesquisas, verifiquei que atraves do /dev/port é possivel efetuar acesso direto a qq porta tb em Linux (necessita privilégios de root)

Observe que é possivel usar qq endereço de porta porém ele deve ser informado em Decimal e nao Hexa...

Hex Dec
378 -> 888 - LPT1
60 -> 96 - Porta AT


{-----------------------------------------------------------------------------
 Lê 1 byte de uma porta de Hardware
 Nota: - Essa funçao funciona normalmente em Win9x,
        - XP /NT /2000, deve-se usar um device driver que permita acesso direto
          a porta do Hardware a ser acessado (consulte o fabricante do Hardware)
        - Linux: é necessário ser ROOT para acessar /dev/port
          (use: su  ou  chmod u+s SeuPrograma ) 
 ---------------------------------------------------------------------------- }
{$WARNINGS OFF}
function InPort(PortAddr:word): byte;
{$IFDEF LINUX}
var Buffer : Pointer ;
    FDevice : String ;
    N : Integer ;
    FHandle : Integer ;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
  asm
    mov dx,PortAddr
    in al,dx
  end;
{$ELSE}
  FDevice := ´/dev/port´ ;
  Buffer  := @Result ;

  FHandle := FileOpen(FDevice, fmOpenRead);
  if FHandle <= 0 then
     raise Exception.Create(´Erro abrindo:  ´+FDevice+#10+10+
                            ´Você deve ter direito de Leitura nesse diretório.´);

  N := FileSeek( FHandle, PortAddr, 0 )  ;
  if N <= 0 then
     raise Exception.Create(´Erro ao acessar a porta: ´+IntToStr(PortAddr));

  N := FileRead(FHandle, Buffer^, 1) ;
  if N <= 0 then
     raise Exception.Create(´Erro ao ler a porta: ´+IntToStr(PortAddr));

  FileClose( FHandle );
  sleep(1) ;   
{$ENDIF}
end ;
{$WARNINGS ON}

{-----------------------------------------------------------------------------
 Envia 1 byte para uma porta de Hardware 
 Nota: - Essa funçao funciona normalmente em Win9x,
        - XP /NT /2000, deve-se usar um device driver que permita acesso direto
          a porta do Hardware a ser acessado (consulte o fabricante do Hardware)
        - Linux: é necessário ser ROOT para acessar /dev/port
          (use: su  ou  chmod u+s SeuPrograma ) 
 ---------------------------------------------------------------------------- }
procedure OutPort(PortAddr: word; Databyte: byte);
{$IFDEF LINUX}
var Buffer : Pointer ;
    FDevice : String ;
    N : Integer ;
    FHandle : Integer ;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
  asm
     mov al, Databyte
     mov dx,PortAddr
     out dx,al
  end;
{$ELSE}
  Buffer := @Databyte ;
  FDevice := ´/dev/port´ ;

  FHandle := FileOpen(FDevice, fmOpenWrite);
  if FHandle <= 0 then
     raise Exception.Create(´Erro abrindo:  ´+FDevice+#10+10+
                            ´Você deve ter direito de Escrita nesse diretório.´);

  N := FileSeek( FHandle, PortAddr, 0 )  ;
  if N <= 0 then
     raise Exception.Create(´Erro ao acessar a porta: ´+IntToStr(PortAddr));

  N := FileWrite(Fhandle, Buffer^, 1) ;
  if N <= 0 then
     raise Exception.Create(´Erro ao escrever na porta: ´+IntToStr(PortAddr));

  FileClose( FHandle );
  sleep(1) ;
{$ENDIF}
end ;




GOSTEI 0
POSTAR