Página 1 de 1

Misturando código em C com harbour

Enviado: 11 Mai 2012 14:06
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 (:

Misturando código em C com harbour

Enviado: 11 Mai 2012 14:43
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.

Misturando código em C com harbour

Enviado: 11 Mai 2012 14:47
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.

Misturando código em C com harbour

Enviado: 14 Mai 2012 11:41
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

Misturando código em C com harbour

Enviado: 15 Mai 2012 09:57
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.

Misturando código em C com harbour

Enviado: 15 Mai 2012 11:05
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.

Misturando código em C com harbour

Enviado: 08 Abr 2015 12:01
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...