preguntita enlazado de funciones en C

preguntita enlazado de funciones en C

Postby elvira » Tue May 05, 2015 11:35 am

Amigos,

Tengo unas funciones en C, definidas con #pragma BEGINDUMP, por ejemplo:

Code: Select all  Expand view


/------------------------------------------------//
#pragma BEGINDUMP

#include "windows.h"
#include "hbapi.h"
#include "hbapiitm.h"
#include "SecureEngineSDK.h"
#include "WinLicenseSDK.h"





HB_FUNC( ISVIRTUALPC )
{
  hb_retl( WLCheckVirtualPC() );
}

#pragma ENDDUMP
//------------------------------------------------//


 




¿Cómo hago para que estas funciones en C sólo se compilen si llamo a ISVIRTUALPC() desde Harbour?.

Desde ya, muy agradecida ;).
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: preguntita enlazado de funciones en C

Postby Carlos Mora » Tue May 05, 2015 1:13 pm

Elvira,

el enlazado opcional se hace si pones las funciones en una librería. Todo lo que está dentro de un mismo PRG, y por lo tanto en un OBJ, se llama módulo. El enlazador busca las funciones primero en los objs, y si no las encuentra las busca en las LIBs, y cuando la encuentra incluye todo el modulo donde encontro la función, por lo que te sugiero que pongas en cada prg o C solo las funciones relacionadas, no hagas grandes prgs que contienen muchas funciones, porque si usas una sola de ellas todo el modulo, es decir todas las funciones, se incluirán en el exe.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: preguntita enlazado de funciones en C

Postby Antonio Linares » Tue May 05, 2015 4:31 pm

Elvira,

En mi opinión no se puede. La funcion IsVirtualPC() se ejecutará en tiempo de ejecución de la aplicación.

Y el proceso de compilado de tu EXE es algo que ocurrió antes de ese momento.

Salvo que te refieras a otra cosa.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41332
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: preguntita enlazado de funciones en C

Postby cnavarro » Tue May 05, 2015 5:10 pm

Y con algun #define / #ifdef ?
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6501
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: preguntita enlazado de funciones en C

Postby Carlos Mora » Wed May 06, 2015 3:41 pm

¿Por que no os parece bien lo de la lib?

Recordar que si una funcion de una lib no se referencia, no se enlaza. Para forzarlo se inventó el REQUEST. Recordad que XBrowse con ADS fallaba si no haciamos el REQUEST de ADSGetRelKeyPos() y ADSKeyCount(), el caso de Elvira sería justo lo contrario, no?
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: preguntita enlazado de funciones en C

Postby hmpaquito » Wed May 06, 2015 3:52 pm

Carlos,

Yo creo que hay confusion en el hilo.

Elvira habla de "compilen"... es decir, compilar dependiendo del valor devuelto por una funcion, en este caso IsVirtualPC(). Esto, todos sabemos que no es posible.
Antonio Linares responde pensando que habla de linkar en funcion de una funcion y responde naturalmente que no se puede.
Cristobal cree que es imposible y quiere que se sustituya el IsVirtualPC() por algo asi como un (es mio) __IS_VIRTUALPC__
Tu viendo, todo esto has interpretado "linkar".

¿ Alguien da más ?

Creo que la pregunta es difícil de responder si Elvira no hace saber exactamente lo que quiere.

Saludos.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: preguntita enlazado de funciones en C

Postby cnavarro » Wed May 06, 2015 6:03 pm

hmpaquito wrote:Carlos,

Yo creo que hay confusion en el hilo.

Elvira habla de "compilen"... es decir, compilar dependiendo del valor devuelto por una funcion, en este caso IsVirtualPC(). Esto, todos sabemos que no es posible.
Antonio Linares responde pensando que habla de linkar en funcion de una funcion y responde naturalmente que no se puede.
Cristobal cree que es imposible y quiere que se sustituya el IsVirtualPC() por algo asi como un (es mio) __IS_VIRTUALPC__
Tu viendo, todo esto has interpretado "linkar".

¿ Alguien da más ?

Creo que la pregunta es difícil de responder si Elvira no hace saber exactamente lo que quiere.

Saludos.


Yo me referia a incluir en el codigo algo asi

Code: Select all  Expand view

#ifdef ....
 Function ...

 Return ...
 

Al igual que en las llamadas a la function, no lo he probado
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6501
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 8 guests