Página 1 de 1

Que significa implicit declaration of function 'LockWorkStation'

Publicado: Vie May 23, 2014 12:11 pm
por Bingen Ugaldebere
Buenos dí­as XTeam
Estaba intentando hacer una función de C muy simple y no lo consigo
#pragma BEGINDUMP
#include "Windows.h"
#include "Xailer.h"
#include "stdio.h"
XA_FUNC( LOCKPC )
{
hb_retl( LockWorkStation() );
}
#pragma ENDDUMP
El compilador me da de todas todas:
warning: implicit declaration of function 'LockWorkStation'
[-Wimplicit-function-declaration]
Muchas Gracias.

Que significa implicit declaration of function 'LockWorkStation'

Publicado: Vie May 23, 2014 12:45 pm
por joselalinf
Bingen,
significa que no encuentra el prototipo de la función. Hazlo así­:
> #pragma BEGINDUMP
#define _WIN32_WINNT 0x0500
> #include "Windows.h"
> #include "Xailer.h"
> #include "stdio.h"
Este puedes quitarlo.
Saludos,
José Lalí­n

Que significa implicit declaration of function 'LockWorkStation'

Publicado: Vie May 23, 2014 4:24 pm
por Bingen Ugaldebere
Gracias José pero además de esto tiene que ser el primero de los #pragma
BEGINDUMP del PRG para que funcione por que estaba el tercero y seguí­a
dando el mismo error.
//---------------------------------------------------------- --------------------
//Bloquea la estacion de trabajo
#pragma BEGINDUMP //Tiene que ser el primer #pragma
BEGINDUMP del prg para que funcione
#define _WIN32_WINNT 0x0500
#include "Windows.h"
#include "Xailer.h"
XA_FUNC( LOCKPC )
{
hb_retl( LockWorkStation() );
}
#pragma ENDDUMP
//---------------------------------------------------------- --------------------
//ShutDownPC apaga el PC cerrandolo todo, ojo lo que no está grabado se
pierde
#pragma BEGINDUMP
#include "Windows.h"
#include "Xailer.h"
XA_FUNC( SHUTDOWNPC )
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if( OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY, &hToken ) ){
LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid );
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0 );
if( GetLastError() == ERROR_SUCCESS ){
InitiateSystemShutdown( NULL, NULL, 0, TRUE, FALSE );
}
}
}
#pragma ENDDUMP
//---------------------------------------------------------- --------------------
//RebootPC resetea el PC cerrandolo todo, ojo lo que no está grabado se
pierde
#pragma BEGINDUMP
#include "Windows.h"
#include "Xailer.h"
XA_FUNC( REBOOTPC )
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if( OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY, &hToken ) ){
LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid );
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0 );
if( GetLastError() == ERROR_SUCCESS ){
InitiateSystemShutdown( NULL, NULL, 0, TRUE, TRUE );
}
}
}
#pragma ENDDUMP
//---------------------------------------------------------- --------------------

Que significa implicit declaration of function 'LockWorkStation'

Publicado: Vie May 23, 2014 7:05 pm
por joselalinf
Bingen,
> Gracias José pero además de esto tiene que ser el primero de los #pragma
> BEGINDUMP del PRG para que funcione por que estaba el tercero y seguí­a
> dando el mismo error.
entonces pon las tres funciones en el mismo bloque ;-)
Saludos,
José Lalí­n

Que significa implicit declaration of function 'LockWorkStation'

Publicado: Vie May 23, 2014 9:07 pm
por jfgimenez
Bingen,
> Gracias José pero además de esto tiene que ser el primero de los
> #pragma BEGINDUMP del PRG para que funcione por que estaba el tercero
> y seguí­a dando el mismo error.
>
> //---------------------------------------------------------- --------------------
>
> //Bloquea la estacion de trabajo
> #pragma BEGINDUMP //Tiene que ser el primer #pragma
> BEGINDUMP del prg para que funcione
> #define _WIN32_WINNT 0x0500
> #include "Windows.h"
> #include "Xailer.h"
no es por que sea el primero o el último, es porque ese #define tiene
que estar siempre *antes* del #incude "windows.h". Una vez que se ha
procesado windows.h, ya da igual lo que pongas porque no va a hacer ni caso.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info