Array
(
)

muitas duvidas sobre Kylix

Marco Salles
   - 23 mar 2006

o titulo da pergunta é esse mesmo , não achei nada melhor para alguem que não dabe nada a respeito

ate para ter duvida de algo qua não se sabe é dificil ??? Alguem de voce tem dúvida de como o uranio é enriquecido ????

eu estou lendo a respeito e me surgiu uma varias duvidas ??

Para se desenvolver um aplicativo que rode em linux tem que se inicializar este projeto em Cross_Plataform ???
File /new/CLX.Application ???

Quando se abrre um aplicativo , seguindo esta linha(File /new/CLX.Application ) , não se esta usando VCL ????

Os componentes que são exclusivos da VCL some do IDE do delphi , ou continuam lá , porem ao usa-los teremos erros ????

Primeiro são essas duvidas .... Tem mais , tem muito mais , mas para passar adiante devo saber primeiro o basico do basico...


Dopi
   - 24 mar 2006

Ola Marco,


Citação:

Para se desenvolver um aplicativo que rode em linux tem que se inicializar este projeto em Cross_Plataform ???
File /new/CLX.Application ???

Isso mesmo...


Citação:

Quando se abrre um aplicativo , seguindo esta linha(File /new/CLX.Application ) , não se esta usando VCL ????

Exato... A CLX é muito parecida com a VCL, apesar de ter sido re-escrita desde o inicio (TObject)... Algumas units do Delphi são compartilhadas pela VCL /CLX... mas vc pode notar que todas as Units adcionadas pelos componentes iniciam com a letra Q QForms, QButtons, etc... Ou seja... é outro código fonte...


Citação:

Os componentes que são exclusivos da VCL some do IDE do delphi , ou continuam lá , porem ao usa-los teremos erros ????

A IDE do Delphi tenta ocultar todos os componentes que não são compatíveis com a CLX... Vc notará que alguns componentes sumiram porém outros permanecem lá.. mas na verdade é a versão CLX deles... Se vc usar componentes VCL em uma aplicação CLX, provavelmente terá vários erros de compilação (conflitos entre as units VCL / CLX)... mesmo que vc consiga compila-lo no Delphi... vc NAO será capaz de ser compilado no Kylix


Marco Salles
   - 27 mar 2006

Dopi , muito obrigado pelas confirmaçoes ... Mas coom eu disse são muitas ???

Então , apos criar uma aplicação Cros_Plataforma , para executar no ambiente Linux voce precisa compilar este projeto .. Isto é feito no proprio Linux com uma aplicativo chamapo Kynix

Este aplicatico\Compilador , acho que esta na fase tres , Pois ja vi algo se referindo a ele assim Kynix3,0 é um aplicativo que ja vem no cd do delphi e tem que instala-lo nas maquinas aonde tem o sistema operacional Linux ???

Agora , porque esse duplo trabalho , caso as afirmaçoes anteriores sejam verdadeiras?? Porque não exise um cd do delphi que se instala no linux e se desenvolve por la mesmo????

E antes dessa plataforma Cros , acho que chegou no delphi 6.0 , qual era o procedimento???

Como se pode notar amigo Dopi , as duvidas são muitas e ainda estou muito inseguro com tudo isso

Muito obrigado e desde ja agradecoimentos....


Dopi
   - 27 mar 2006

O Kylix 3 é um produto completo... com uma IDE muito semelhante a do Delphi 7, e com um compilador de ObjectPascal que gera código nativo em Linux, porém só roda no Linux...

Se o programador decidir trabalhar apenas no Kylix... sem problemas... alias... tem problemas sim... A IDE do Kylix não se dá muito bem com as novas distro de Linux com kernel superior a 2.4... O Debug não funciona... o Code Completion tb não funciona...

Então o que se costuma fazer é usar a IDE do Delphi 7 para criar aplicações CLX e Compila-la no Delphi 7 para criar um programa compatívle com Win32... e depois, é só abrir o projeto na IDE do Kylix e compila-lo para Linux

Note portanto, que diferente do Java e .NET... vc irá gerar dois executáveis totalmente diferentes... nativos para as devidas plataformas... Porém usará o mesmíssimo código fonte...

Existe ainda a possibilidade de compilar para Linux dentro da IDE do Delphi 7, usando o [url=http://crosskylix.untergrund.net/]Cross-Kylix[/url]... Mas nesse caso vc não consegue rodar o executável Linux para ver como ficou...


Martins
   - 27 mar 2006


Citação:
O Kylix 3 é um produto completo... com uma IDE muito semelhante a do Delphi 7, e com um compilador de ObjectPascal que gera código nativo em Linux, porém só roda no Linux...

Se o programador decidir trabalhar apenas no Kylix... sem problemas... alias... tem problemas sim... A IDE do Kylix não se dá muito bem com as novas distro de Linux com kernel superior a 2.4... O Debug não funciona... o Code Completion tb não funciona...

Então o que se costuma fazer é usar a IDE do Delphi 7 para criar aplicações CLX e Compila-la no Delphi 7 para criar um programa compatívle com Win32... e depois, é só abrir o projeto na IDE do Kylix e compila-lo para Linux

Note portanto, que diferente do Java e .NET... vc irá gerar dois executáveis totalmente diferentes... nativos para as devidas plataformas... Porém usará o mesmíssimo código fonte...

Existe ainda a possibilidade de compilar para Linux dentro da IDE do Delphi 7, usando o [url=http://crosskylix.untergrund.net/]Cross-Kylix[/url]... Mas nesse caso vc não consegue rodar o executável Linux para ver como ficou...


Muito interessante Daniel, poderiamos tb usar diretivas de compilação para diminuir algum trabalho ou o uso das mesmas é irrelevante?.


Dopi
   - 27 mar 2006

Isso mesmo Martins... as diretivas de compilação IFDEF, IFNDEF são muito importantes para manter o mesmo código... Isso é necessário devido as diferenças dos sistemas operacionais, como nome de arquivos, paths, etc...

Podemos usar IFDEF MSWINDOWS ou IFDEF LINUX

Exemplo: A função abaixo é usada para Copiar Arquivos no Windows e no Linux... No Windows, temos uma API do windows também chamada CopyFile que faz o serviço... porém no Linux é necessário usar Streams..

Usando IFDEFs instruimos o compilador a processar apenas uma parte do código, dependendo do resultado do IFDEF

#Código

function CopyFileTo(AFromFileName, AToFileName : String;
const AFailIfExists : Boolean) : Boolean;
{$IFNDEF MSWINDOWS}
var LStream : TStream;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
Result := CopyFile(PChar(AFromFileName), PChar(AToFileName), AFailIfExists);
{$ELSE}
if FileExists(AToFileName) and AFailIfExists then
Result := False
else
begin
LStream := TFileStream.Create(AFromFileName, fmOpenRead or fmShareDenyWrite);
try
with TFileStream.Create(AToFileName, fmCreate) do
try
CopyFrom(LStream, 0);
finally
Free;

end;
finally
FreeAndNil(LStream);
end;
Result := True;


end;
{$ENDIF}
end;



Outra boa prática é usar as constantes do Delphi / Kylix...

Extraido de SysUtils.pas
#Código
PathDelim  = {$IFDEF MSWINDOWS} ´\´; {$ELSE} ´/´; {$ENDIF}
DriveDelim = {$IFDEF MSWINDOWS} ´:´; {$ELSE} ´´; {$ENDIF}
PathSep = {$IFDEF MSWINDOWS} ´;´; {$ELSE} ´:´; {$ENDIF}

Ou seja, ao invez de usarmos ´\´ para compor um nome de arquivo, usamos PathDelim

Ao invez de usar #13 ou 10 para quebra de linha... usamos sLineBreak


Martins
   - 28 mar 2006


Citação:
Isso mesmo Martins... as diretivas de compilação IFDEF, IFNDEF são muito importantes para manter o mesmo código... Isso é necessário devido as diferenças dos sistemas operacionais, como nome de arquivos, paths, etc...

Podemos usar IFDEF MSWINDOWS ou IFDEF LINUX

Exemplo: A função abaixo é usada para Copiar Arquivos no Windows e no Linux... No Windows, temos uma API do windows também chamada CopyFile que faz o serviço... porém no Linux é necessário usar Streams..

Usando IFDEFs instruimos o compilador a processar apenas uma parte do código, dependendo do resultado do IFDEF

#Código

function CopyFileTo(AFromFileName, AToFileName : String;
const AFailIfExists : Boolean) : Boolean;
{$IFNDEF MSWINDOWS}
var LStream : TStream;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
Result := CopyFile(PChar(AFromFileName), PChar(AToFileName), AFailIfExists);
{$ELSE}
if FileExists(AToFileName) and AFailIfExists then
Result := False
else
begin
LStream := TFileStream.Create(AFromFileName, fmOpenRead or fmShareDenyWrite);
try
with TFileStream.Create(AToFileName, fmCreate) do
try
CopyFrom(LStream, 0);
finally
Free;

end;
finally
FreeAndNil(LStream);
end;
Result := True;


end;
{$ENDIF}
end;



Outra boa prática é usar as constantes do Delphi / Kylix...

Extraido de SysUtils.pas
#Código
PathDelim  = {$IFDEF MSWINDOWS} ´\´; {$ELSE} ´/´; {$ENDIF}
DriveDelim = {$IFDEF MSWINDOWS} ´:´; {$ELSE} ´´; {$ENDIF}
PathSep = {$IFDEF MSWINDOWS} ´;´; {$ELSE} ´:´; {$ENDIF}

Ou seja, ao invez de usarmos ´\´ para compor um nome de arquivo, usamos PathDelim

Ao invez de usar #13 ou 10 para quebra de linha... usamos sLineBreak

Valew Daniel, muito obrigado pelos esclarecimentos e sugestões.


Marco Salles
   - 29 mar 2006

obrigado dopi obrigado martins . Mas com eu disse minhas dúvidas são muitas e eu ia chaegar tb nas diretivas de compilação;;

Mas ja que foi abordada então , vamos proseguir.

File -> New --> CLX.Application

Abro un novo projeto ..

Nesse mesmo projeto ao usar chamadas a funçoes da API do windows , na hora de compilar , não daria ERRO.. pois supostamente essas funçoes não estão disponiveis no Linux ????.. Acho que o própria aplicação ja deva avisar de alguma incompatibilidade sem ter que esperar este resultado na compilação do Kylix :?: :?: :?:

Duvida 2) Ao usar as diretivas de compilação , ainda assim sera necessário compilar o programa no Kylix ou nesse caso , não precisaria.
Não ficou muito claro á resposta dada ao Martins , apesar de particularmente eu ja conhecer a idéia das diretivas..


Citação:
Muito interessante Daniel, poderiamos tb usar diretivas de compilação para diminuir algum trabalho ou o uso das mesmas é irrelevante?.


Obrigado....


Dopi
   - 30 mar 2006

Marco,

Não há vantagem alguma em usar a CLX no Delphi se vc NAO pretende escrever aplicações multiplataforma... ou seja, compila-las no Kylix para Linux

Quando vc usa diretivas de compilação o Compilador ignora completamente o código que está entre um bloco IFDEF, ENDIF que NAO satisfaça a condição... Então se vc quer chamar um API na versao Windows do sistema... sem problemas... desde que ela esteja dentro de um IFDEF MSWINDOWS ou IFNDEF LINUX. Veja o exemplo que postei acima...

Usar APIs do Windows deve ser evitado a qualquer custo, a não ser que vc consiga uma função equivalente no Linux... Caso contrário o seu software nunca poderá ser migrado para Linux, mantendo todas as caracteristicas e funcionabilidade da versao Windows