FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Pasar a C
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Pasar a C
Posted: Tue Dec 24, 2013 09:45 AM
Felices fiestas para todos,

Algun alma caritativa podría pasarme esta función a "C" con Pragma Begindump. Lo he intentado yo solito, pero no funciona.



int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; j = i++) {
if ( ((verty[i]>testy) != (verty[j]>testy)) &&
(testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
c = !c;
}
return c;
}


Muchas gracias
Un saludo



Manuel
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pasar a C
Posted: Tue Dec 24, 2013 01:39 PM

Manuel,

Que error te aparece ? Aqui compila bien

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: Pasar a C
Posted: Tue Dec 24, 2013 04:08 PM
Antonio Linares wrote:Manuel,

Que error te aparece ? Aqui compila bien


Gracias Antonio por contestar. Yo tengo puesto este código:

#pragma BEGINDUMP

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

HB_FUNC( PNPOLY )

int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy) // AQUI DA EL ERROR
{
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; j = i++) {
if ( ((verty[i]>testy) != (verty[j]>testy)) &&
(testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
c = !c;
}
return c;
}

#pragma ENDDUMP


Seguro que el "añadido" para que funciones en xHarbour no es correcto. El errorlo da al compilar en la linea que señalo: Error 2141 Declaration Syntax Error

Muchas gracias y feliz Navidad
Un saludo



Manuel
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pasar a C
Posted: Tue Dec 24, 2013 11:51 PM
Code (fw): Select all Collapse
function Main()
?PNPPOLY(/*aca van parametros*/)
return nil

#pragma BEGINDUMP

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

HB_FUNC( PNPOLY )
{
 int iReturn;

 iReturn = pnpoly( /*aca debes poner los parameros de la funcion, desconosco si los pasaras desde prg o c*/ );
}

int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
  int i, j, c = 0;
  for (i = 0, j = nvert-1; i < nvert; j = i++) 
  {
     if ( ((verty[i]>testy) != (verty[j]>testy)) && (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
     {
        c = !c;
      }
   }
}
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: Pasar a C
Posted: Wed Dec 25, 2013 06:20 AM

Gracias Carlos por tu ayuda.

Los parámetros los pasaría desde un prg, logicamente con los mismos parámetros que tiene la función en C.

pnpoly ( nVert, aVertX, aVertY, nTestX, nTestY) donde nvert es un número entero, aVertY y AvertX array y nTestX - nTestY número con 6 decimales.

He incluido los parámetros en el código reformado opor tí pero me sigue dando errores. ¿tengo que ponerle el tipo?

{
int iReturn;

iReturn = pnpoly( nVert, vertx, verty, testx, testy );
}

La función debería devolver el valor de C. ¿No debería ponerse C en lugar de iReturn?

Muchas gracias de nuevo.

Un saludo



Manuel
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pasar a C
Posted: Wed Dec 25, 2013 10:21 AM
Manuel,

Prueba asi:

Code (fw): Select all Collapse
function Main()
? PNPPOLY(/*aca van parametros*/)
return nil

#pragma BEGINDUMP

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

int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
  int i, j, c = 0;
  for (i = 0, j = nvert-1; i < nvert; j = i++) 
  {
     if ( ((verty[i]>testy) != (verty[j]>testy)) && (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
     {
        c = !c;
      }
   }
}

HB_FUNC( PNPOLY )
{
   float vertx = hb_parnd( 2 );
   float verty = hb_parnd( 3 );

   hb_retnl( pnpoly( hb_parnl( 1 ), &vertx, &verty, hb_parnd( 4 ), hb_parnd( 5 ) ) );
}

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: Pasar a C
Posted: Wed Dec 25, 2013 03:56 PM

Ahora ha funcionado.

Muchiiiiiiiisimas gracias

Un saludo



Manuel

Continue the discussion