Integração entre C e Clipper

Fórum sobre outras linguagens de programação.

Moderador: Moderadores

Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Integração entre C e Clipper

Mensagem por Dr.Microso »

Senhores saudações!

Não raro, encontramos na NET uma vasta coleção de pequenos mas valiosos executáveis em C.
Me refiro em especial aos que avaliam condições do hardware ou sistema operacional, com retorno simples ao MS-DOS: 1 ou 0 (.F. ou .T.).
Muitos destes não existem em bibliotecas (ou possuem interface) para o Clipper.

Se tenho uma pequena instrução em C que avalia uma condição qualquer do OS e retorna um valor ao MS-DOS (via "printf" por exemplo), como posso modificá-la para que retorne o mesmo valor diretamente a uma rotina em Clipper?

Alguém poderia postar exemplos de código (antes e depois)?

Grato!
Nota de Moderação:
por Pablo César: O tópico foi movido da seção Clipper por tratar específicamente de outra linguagem.
Editado pela última vez por Dr.Microso em 07 Jun 2009 12:00, em um total de 1 vez.
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Integração entre C & Clipper

Mensagem por Maligno »

Na instalação do Clipper v5.2 há exemplos de funções escritas em C.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Integração entre C e Clipper

Mensagem por Pablo César »

retorna um valor ao MS-DOS (via "printf" por exemplo), como posso modificá-la para que retorne o mesmo valor diretamente a uma rotina em Clipper?
Dependendo da instrução a serem utilizadas até dariam para integrar diretamente através de LIB com o Clipper. Caso de não ser possível, teria duas opções, criando um executável que de dentro da aplicação Clipper possa ser executada. Claro que os resultados obtidos pela aplicação/C deverá gerar um arquivo texto (por exemplo) a fim de que na aplicação/Clipper possa ler-la e processá-la. A outra opção, é também através de arquivo intermediário (arquivo texto, sendo gerado pela aplicação/C) mas sendo enjambrado dentro de uma LIB. Esse recurso você poderá obter como exemplo e ler todo o procedimento para esse enjambramento ou embutimento (segundo autor) no pacote da WAPI do Maligno: http://pub.buzinello.com/xbase/clipper/ ... _v1.03.zip (veja na pasta ..\wapi_v1.03\WAPI\LIB\WAPI2LIB todo o procedimento).

Espero que você consiga compartilhar aqui no fórum todo benefício e contribuição que possa adicionar as aplicações Clipper !
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Re: Integração entre C e Clipper

Mensagem por Dr.Microso »

Pablo, saudações!

Suas sugestões procedem e são úteis!
Vou tentar exemplificar melhor meu intento através de uma codificação extremamente básica...

CASO
MALIGNO é o nome de um executável (e seu fonte em C).
O programa já mostrou-se lógico e seu retorno é impresso no PROMPT, todavia, quero que ele o redirecione para a rotina em Clipper (PABLO.PRG) que fará sua chamada. Naturalmente, pretendo alterar, compilar e adicionar MALIGNO.OBJ a minha LIB.
PABLO não passa parametros para MALIGNO. Este só é invocado pelo primeiro.

> código Clipper: PABLO.PRG

Código: Selecionar todos

 *----------------------------------------------------
LOCAL cA
*----------------------------------------------------
cls
cA:=Maligno()
DispOutAT(10, 10, cA, "GR+/N"); Inke(0)
retu
*------------------------------------------the end--- 
Agora a listagem do fonte em C como encontrado: MALIGNO.C

Código: Selecionar todos

 #include<stdio.h>

void main()

{
//declaração da variável local
   char str                                                                      
//atribuíndo valor a variável
   str="Faça e mentalize o bem, que a felicidade vem!"    
//imprimindo a variável
   printf(str=%c\n", str)                                                       
}
As questões são...

> como alterar o código acima para ser utilizado por uma chamada do Clipper retornando o valor somente a ele?
> a variável em questão é char. E como ficaria este retorno se ela fosse do tipo float, double ou int?

Grato!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Integração entre C e Clipper

Mensagem por ANDRIL »

Lembre-se que para devolver um resultado do C para o Clipper vc devera usar os comandos de retorno de funcao do C.

Código: Selecionar todos

Char     -  _retc(char*)
Date     -  _retds(char*)
Logical  -  _retl(int)
numeric -  _retni(int)
numeric -  _retnl(long)
numeric -  _retnd(double) 
              _ret()
              _retclen(char,int) 
Para compilar um codigo C compativel com Clipper, usando o compilador Microsoft C 5.1, devera conter os seguintes parametros:

Código: Selecionar todos

CL /c /AL /FPa /Gs /Oalt /Zl <nome_do_arquivo>.c
Para linkagem do Clipper com o C

RTLINK FI <arq_obj_clipper>,<arq_obj_c> LIB CLIPPER, EXTEND, LLIBCA

Quanto a sua função tente o seguinte:

Código: Selecionar todos

 #include<stdio.h>

//void main()  

{
//declaração da variável local
   char str;                                                                     
//atribuíndo valor a variável
   str="Faça e mentalize o bem, que a felicidade vem!";   
//imprimindo a variável
//   printf(str=%c\n", str)                                                       
   _retc(str);
}

Não sei se vai te ajudar ou dar uma luz, ja vou dizendo, nao programo em C, alias nao sei quase nada dessa linguagem, mais espero que lhe ajude.

Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Re: Integração entre C e Clipper

Mensagem por Dr.Microso »

Prezado Andril, saudações!

Sim, ajudou! Com certeza é uma luz e que Luz.
Só está faltando algumas pequenas implementações que estou ainda pesquisando!

Muito grato!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Integração entre C e Clipper

Mensagem por alxsts »

Olá amigos,

existe um livro (naturalmente muito antigo - 1991), que como sugere o título, trata do assunto. Seguem os dados:

Título : Clipper com C Sem Mistérios
Autores: Carlos Augusto P. Gomes e Antonio Carlos Barbosa
Editora : Érica
ISBN : 85-7194-051-7

[]´s
AlxSts
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Re: Integração entre C e Clipper

Mensagem por vagucs »

uma dica, a 10 anos atras eu fiz uma lib grafica em C e ASM para clipper, era para criar jogos em clipper, ficou rapida pacas, so roda 320x200, ela está em meu site com codigo fonte completo, ela tem tudo la, as interfaces para retornar valores pro clipper e tudo mais, acho que vai valer como excelente fonte de consulta.

Na documentação NG do clipper você tem la todas as rotinas para criar interfaces em C para clipper.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Re: Integração entre C e Clipper

Mensagem por Dr.Microso »

Colegas, salve!

Consegui sanar minhas dúvidas...
Agradeço a todos que aqui postaram, pois todas as sugestões procederam, foram utéis e colocadas em prática.
Em especial aos colegas Wagner e Alxsts, cuja indicação do livro Clipper com C Sem Mistérios (fiz aquisição) foi oportuna e decisiva na compreensão da matéria no curtíssimo tempo que tinha.

Segue um link muito interessante com muitos exemplos (download) para estudo...
Os fontes possuem aplicação diversa e foram preparados para serem chamados por uma função em Clipper, retornando um valor a mesma.
Na parte direita superior da página atente para um outro link: Linking C And Clipper... que pode ser útil tb.

http://www.ousob.com/c_code/cmenu.php

Viva o CA (Código Arte) Clipper e suas extensibilidades!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Responder