Misturando código em C com harbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Misturando código em C com harbour

Mensagem por bencz »

Olá.... gostaria de saber como posso fazer uma mistura de códigos em C ou C++ com clipper...

por exemplo... eu tenho uma classe em C++:

Código: Selecionar todos

class Teste
{
private:
    int a, b;

public:
    Teste(int _a, int _b)
    {
       a = _a; b = _b;
    }
    virtual ~Teste() { };

    int soma() { return a+b; };
};
como eu posso usar essa classe em Clipper/Harbour ??

==================================================================>

Tendo uma função simples em C, como posso utilizar ela em Clipper/Harbour, sei la, como por exemplo, uma função int e/ou uma função void.... ??

Obrigado (:
Imagem
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á

Misturando código em C com harbour

Mensagem por Pablo César »

Acho que primeiramente tem que dominar ou saber o básico de linguagem C.

Sobre linguagem C em Clipper, veja este tópico (bem antigo): https://pctoledo.org/forum/viewto ... 865#p14865

O que eu sabia, que o compilador C para criar uma LIB (por exemplo) deve ser da Microsoft porque da Borland você não consegue linkar com Clipper.

Até onde sei sobre código em C no Harbour, tem que ser de padrão ANSI (puro C), não creio que possa ser inserido C++ que alguém me corrija se eu estiver enganado.

Para inserir um código em C adentro do seu código-fonte, bastaria você colocar no final do PRG (como usualmente é feito):

Código: Selecionar todos

pragma BEGINDUMP

// código em C

#pragma ENDDUMP
Exemplo de um código em C: com a finalidade de posicionar a janela no meio da tela, independente da resolução que se encontre o video:

Código: Selecionar todos

#define HB_OS_WIN_USED
#define _WIN32_WINNT   0x0400

#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC ( C_CENTER ) 
{
	RECT rect;
	int w, h, x, y;
	GetWindowRect((HWND) hb_parnl (1), &rect);
	w  = rect.right  - rect.left;
	h = rect.bottom - rect.top;
	SystemParametersInfo( SPI_GETWORKAREA, 1, &rect, 0 );
	x = rect.right - rect.left;
	y = rect.bottom - rect.top;
	SetWindowPos( (HWND) hb_parnl (1), HWND_TOP, (x - w) / 2, (y - h) / 2 + 1, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE ) ;
}
Note que para uso com Harbour, a função em C sempre começa com HB_FUNC e logo entre parêntese o nome da função (geralmente escrito em maiúscula).

Quanto ao código em C que você postou, não creio que possa ser executado. Também irá dar falta da função soma() e talvez a sua falta de parâmetros, creio eu.
como posso utilizar ela em Clipper/Harbour, sei la, como por exemplo, uma função int e/ou uma função void.... ??
Uma função que começa com int na linguagem C significa que o retorno será um inteiro e o termo void indica que a função não aceita parâmetros e também não retorna valor algum após finalizar aplicação. De em mais, cabe cada um estudar a linguagem C que é muito poderosa.

Mas agora me diga para quê você quer código em C com Harbour ou em Clipper, conte-nos qual é a sua intenção ou é apenas para seu aprendizado.
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.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Misturando código em C com harbour

Mensagem por alxsts »

Olá!

Não sei se em Harbour tem equivalente mas em xHarbour, é possível escrever código C dentro do fonte Harbour entre as tags begin e enddump (acho que C++ não funciona). Exemplo do site do xHarbour:

Código: Selecionar todos

//-------------------------------------//
GLOBAL g_MyObject
#include "hbclass.ch"
PROCEDURE Main()
   g_MyObject := MyClass()
   MyCFunction()
RETURN

CLASS MyClass
   METHOD MyMethod INLINE Alert( "MyMethod" )
ENDCLASS

#pragma BEGINDUMP
HB_FUNC( MYCFUNCTION )
{
   hb_objSendMsg( &G_MYOBJECT, "MyMethod", 0 );
   // Note must be ALL-CAPS!
}
#pragma ENDDUMP
//-------------------------------------//
Em Clipper é possível linkar módulos C e Assembler junto aos OBJs Clipper.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
viniciuspc
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Dez 2006 17:18
Localização: Rio de Janeiro

Misturando código em C com harbour

Mensagem por viniciuspc »

olá

Em C eu nunca utilizei com o Clipper, mas em Assembler sim!

No Clipper eu compilava o fonte em ASM com o TASM (Turbo Assembler da Borland) para gerar o OBJ. depois era só colocar no LNK e linkeditar tudo junto.

Consultando o "Integrando Clipper 5.01 com Turbo C" de William Pereira Alves e o "Clipper com C, sem mistérios" de Carlos Augusto P.Gomes e Antonio Carlos Barbosa, basta seguir o mesmo caminho com o Turbo C (TCC) da Borland ou do Microsoft C.

[]´s
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

Misturando código em C com harbour

Mensagem por vailton »

Em harbour é possivel mesclar códigos em C, C++ e até assembler se o seu compilador/linker suportar. Inclusive o código fonte de várias LIBs gráficas como MiniGui, hwGui e outras estão recheados de exemplos dos mais variados modos sobre como fazer isto... e geralmente o processo é relativamente bem simples.
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
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á

Misturando código em C com harbour

Mensagem por Pablo César »

Obrigado Renato pelo esclarecimento. Realmente existe ao menos o que eu chequei em Minigui tem: C, C++ e Turbo Assembler da Borland.
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
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Misturando código em C com harbour

Mensagem por Nascimento »

Revivendo esse topico estou com um problema que nao consegui solucionar
eu tenho um fonte de uma lib em C para clipper estou tentando portar pra harbour
fiz as auteraçoes devidas

tipo #include "extended.h "
para #include "hbapi.h"
de _parni
para hb_parni
bem queria saber dos nobres amigos como gerar uma lib apartir do codigo.c para usar no harbour como fazia no clipper com o "TCC" ou "MSC5.0"

sim é para compilar em habour-dos
se possivel algum amigo conhecer o script por favor se possivel postar...
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Responder