Página 1 de 1

RDD Six 3.02 Again...

Enviado: 16 Jul 2007 16:04
por miracle
Boa Tarde!

Estou insistentemente tentando usar a RDD Six 3.02 desde o começo do mês. E apanhando feio. Numa das minhas tentativas, fiz até um .prg de teste, que é o seguinte:

Código: Selecionar todos

SELECT A
USE EMPRESAS.DBF VIA "SIXCDX"
IF .NOT. FILE("EMPCOD.CDX")
    INDEX ON CODIGO TAG EMPCOD
ENDIF
SET INDEX TO EMPCOD.CDX
SET ORDER TO 1
BROWSE()
IF LASTKEY() = 27
    CLOSE DATA
    SET COLOR TO
    CLEAR SCREEN
    RETURN
ENDIF
Ao compilar ele não dá erro algum. Agora, ao executar, aparece uma mensagem de erro dizendo:

"ERROR DBCMD/1015 Argument error: DBUSEAREA" que aponta para a linha 2 do arquivo.

Junto com o RDD Six vêm alguns exemplos do uso do Hiper-Six, etc. Mas aquilo me pareceu uma coisa de doido.

Se não for pedir muito (nem abusar da boa vontade de vocês) será que alguém poderia postar aqui no fórum alguns exemplos do uso do RDD Six para abrir arquivos, criar índices, pesquisar arquivos usando aquele comando parecido com o SET FILTER TO, etc?

Enviado: 16 Jul 2007 16:28
por Maligno
Como você está "linkando" seu programa?

Enviado: 16 Jul 2007 17:11
por miracle
Amigo Maligno,

Estou compilando e linkeditando com um arquivo .bat assim:

CLS
CLIPPER %1
IF NOT ERRORLEVEL 1 EXOSPACE FILE %1
DEL %1.obj

O que estou fazendo de errado?

Enviado: 16 Jul 2007 17:21
por Maligno
miracle escreveu:CLS
CLIPPER %1
IF NOT ERRORLEVEL 1 EXOSPACE FILE %1
DEL %1.obj

O que estou fazendo de errado?
Você está dizendo pro Clipper usar o RDD SIX, mas não está dando isso pra ele. De onde ele vai tirar? :)))

No mínimo, você tem de incluir a LIB (SIX3.LIB, que está na pasta \SIX\LIB) na linha de linkedição. É esta LIB que contém o RDD.

Acho que uma vez que você está usando a cláusula "VIA" não será necessário mais nada, por enquanto. Depois, ao se aprofundar mais neste RDD você verá que existem outros recursos, como os headers que substituem alguns comandos do Clipper.

Mas tente isso primeiro. Depois você sobe pro próximo degrau.

Enviado: 16 Jul 2007 17:33
por miracle
Amigo Maligno,

Eu pensei que o clipper localizasse as libs nls diretórios especificados no autoexec.bat. Mas, se não é assim, como devo fazer? Seria, por acaso, assim:

CLS
CLIPPER %1
IF NOT ERRORLEVEL 1 EXOSPACE FILE %1 LIB FGLIB30, CLIPPER, EXTEND
DEL %1.obj

É que eu não tenho o arquivo NG do Exospace.

Enviado: 16 Jul 2007 17:52
por Maligno
miracle escreveu:Eu pensei que o clipper localizasse as libs nls diretórios especificados no autoexec.bat. Mas, se não é assim, como devo fazer?
Os pingos nos is... Nada a ver com autoexec. Falemos de variáveis de ambiente, que tanto podem vir pelo autoexec quanto podem ser digitadas por você mesmo a qualquer momento.

O Clipper não localiza coisa alguma. Ele apenas compila e transforma seus comandos em op-codes (códigos internos).
No que diz respeito às variáveis de ambiente, o Clipper só precisa de uma: SET INCLUDE, que lhe diz onde procurar pelos headers que ele possa vir a precisar.
No decorrer do processo de compilação o Clipper encontra alguns símbolos. Ele não tá nem aí pra eles. A função dele é apenas identificar e incluir estes símbolos numa tabela dentro de cada objeto que ele gerar. O trabalho do Clipper morre aí.

Gerado o objeto (sem erros), entra em ação o linker, que vai pegar aquela tabela de símbolos pendentes e procurar por eles nas bibliotecas e/ou objetos aos quais ele tiver acesso, através da informação que você lhe passar pela linha de comando (cláusulas FILE e LIB). A intenção é ligá-los ao seu novo executável. Isso é o que chamamos de ligação estática. Ou seja, o código objeto que representa aquele símbolo será "incorporado" ao seu executável. Claro que pra isso o linker tem que saber onde procurar. Aí entram as variáveis de ambiente de novo. Principalmente SET LIB e SET OBJ. O restão nem importa tanto.

Detalhe: pra todas as linguagens, o processo de montagem de um EXE é semelhante a esse. A única diferença mais notável é quando há ligação dinâmica (DLL). Mas isso é outro assunto. :)
CLS
CLIPPER %1
IF NOT ERRORLEVEL 1 EXOSPACE FILE %1 LIB FGLIB30, CLIPPER, EXTEND
DEL %1.obj
As LIBs CLIPPER e EXTEND são default. Ou seja, ao montar seu objeto, o Clipper já informa o linker que essas LIBs deverão ser pesquisadas. Não é necessário informá-las. No presente caso, só noto a falta da SIX3.LIB.
É que eu não tenho o arquivo NG do Exospace.
Nem eu. Mas ele não será necessário. Se quiser montar seu EXE no modo protegido, use o BLinker, que é bem melhor. Mas por enquanto, fique apenas com o RTLink, que é o mais simples.

Enviado: 17 Jul 2007 14:37
por miracle
Boa Tarde, Amigos!

Consegui! Eis o que fiz para que tudo desse certo:

1 - Sempre fui fanático pelo Windows 98. Migrei recentemente para o Windows XP Professional Edition. E estava colocando um arquivo "autoexec.bat" e um "config.sys" no diretório rais "C:\" como sempre tinha feito no Win98. Acontece que, no XP, é necessário usar o "autoexec.nt" e o "config.nt", que estão na pasta C:\Windows\System32. Era por isso que o clipper não encontrava as bibliotecas!

2 - Quanto à compilação com o Exospace não consegui fazer nada. O jeito foi usar o rtlink com um arquivo de lote contendo as seguintes linhas:

cls
clipper %1
if not errorlevel 1 rtlink fi %1 lib clipper, extend, fglib31, six3
%1

Feito isso, funcionou que foi uma maravilha!
Muito obrigado a todos! Valeu, mesmo! Precisando de mim, é só falar!