Foros del Web » Programando para Internet » PHP »

como usar w32api_register_function

Estas en el tema de como usar w32api_register_function en el foro de PHP en Foros del Web. tengo el siguiente error Fatal error: Call to undefined function: w32api_register_function() el codigo es el siguiete <?php define("MB_OK", 0); dl("php_w32api.dll"); w32api_register_function("User32.dll", "MessageBoxA", "long"); $compo=new COM("MSComDlg.CommonDialog"); ...
  #1 (permalink)  
Antiguo 29/07/2004, 14:57
 
Fecha de Ingreso: marzo-2002
Mensajes: 449
Antigüedad: 15 años, 8 meses
Puntos: 0
como usar w32api_register_function

tengo el siguiente error

Fatal error: Call to undefined function: w32api_register_function()

el codigo es el siguiete

<?php
define("MB_OK", 0);
dl("php_w32api.dll");
w32api_register_function("User32.dll",
"MessageBoxA",
"long");


$compo=new COM("MSComDlg.CommonDialog");
$compo->ShowOpen();

MessageBoxA(NULL,
$str,
"Probando msgbox",
MB_OK);

?>

ya añadi la libreria tambien en el php.ini y no se ha resuelto nada.

Alguien sabe que onda?
  #2 (permalink)  
Antiguo 29/07/2004, 15:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues según parece tu "instalación" de la extensión php_win32.dll no fué correcta.

Hasta que en un phpinfo() que hagas no veas el bloque correspondiente a "win32" no vas a poder ejecutar esas funciones. (indica que has hecho para activar tu extensión)

Si vas a instalar la extensión en tu php.ini de forma permanente .. quita el dl() que llama dinámicamente a dicha extensión.

Un saludo,

PD: Supongo que usaras un servidor con PHP bajo windows?
  #3 (permalink)  
Antiguo 29/07/2004, 16:38
 
Fecha de Ingreso: marzo-2002
Mensajes: 449
Antigüedad: 15 años, 8 meses
Puntos: 0
como se llama ese apartado en particular

porque la verdad checando la documentacion dicen textualmente:

Esta extensión no tiene directivas de configuración en php.ini.

y pues claro la unica referencia es con

extension=php_w32api.dll

como te he dicho ya lo intente con el puro dl y activando la directiva y de ninguna forma me ha funcionado.

¿Puedes ser un poco mas especifico en que tiene que decir?

Lo estoy intentando en windows xp con php 4.3.3 y tambien con el que viene con php-gtk (no me acuerdo que version de php es), tambien prove con php5 pero ahi ni siquiera esta el dll que se necesita y nada mas hay un php_win32std.dll, que al parecer tiene la declaracion de las puras constantes utilizadas.

Última edición por Troyano; 29/07/2004 a las 16:43
  #4 (permalink)  
Antiguo 29/07/2004, 22:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cuando tienes correctamente instalada dicha extensión te sale un apartado nuevo en tu phpinfo() que dice:

Win32 API

Win32 API Support ----> enabled


(a mi me sale entre el bloque "PHP core" y el "Apache")

Usas otras extensiones aparte de esa? (GD o simlares? .. ) donde apunta la directiva:
extension_dir = ...

Debe apuntar al directorio extensions/ donde tendras esas php_xxx.dll (entre ellas la mencionada: php_w32api.dll)

Un saludo,
  #5 (permalink)  
Antiguo 29/07/2004, 23:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Estube probando tu ejemplo ...

No me funcionó con un error como el que mostrarstes en principio.

Remitiendome al manual de PHP veo esto:

w32api_register_function
(4.2.0 - 4.2.3 only)

(lo probé en PHP 4.3.2 bajo W98) ...

"Parece" que el manejo de wind32API cambió (pero no así la documentación de forma "oficial"). En algunos sítios hablan de otra forma de controlar el objeto:

Ejemplo:
Código PHP:
<?php
$api 
= new win32;
$api->registerfunction("long MessageBox (long hWnd, string lpText, string
lpCaption, long uType) from User32.dll"
);

if (
$api->MessageBox(0"testing""testing somemore"0) == 0)
{
echo 
"failed";
}else{
echo 
"succeeded";
}
?>
((no conozco el API de windows) .. y para colmo se me cuelga Apache al querer ejecutarlo).

En PHP 5 .. parecer que existe la extensión "FFI" que sustituye al proyecto (nunca terminado al parecer "win32Api"):

Ejemplo para PHP 5 usando php_ffi.dll
Código PHP:
<?php
$windows 
= new ffi ("[lib='user32.dll'] int MessageBoxA( int handle, char *text, char *caption, int type );" );

echo 
$windows->MessageBoxA(0"Message For You""Hello World"1);
?>
http://pecl.php.net/package/ffi

Por lo menos estas "FFI" dicen que soportarían cualquier tipo de "libreria" .. ya sea una .dll (windows) o un .so (linux o como sean ...)

En conclusión
Si usas PHP versiones entre la 4.2.0 y 4.2.3 podrías usar las win32API funciones que ves en el manual (obsoleto y no actualizado a la fecha).

Si necesitas acceder a API de Windows (Win32 .. etc) tendrías que usar PHP 5 con la extensión "FFI" (De esto parece que hay más documentación).


Un saludo,

PD: Fuentes ... google y viendo el "la página en caché" .. por qué lo que es en PHP.net además de no actualizar la documentación sobre win32 .. quitaron los comentarios de los usuarios donde hacían mención a todo esto.
  #6 (permalink)  
Antiguo 02/08/2004, 17:16
 
Fecha de Ingreso: marzo-2002
Mensajes: 449
Antigüedad: 15 años, 8 meses
Puntos: 0
Muchas gracias voy a probar lo que me comentas del cambio de sintaxis....

la verdad es que habia visto los ejemplos que mensionas pero no sabia nada de cambio con respecto al manual oficial y yo me preguntaba porque usaban un constructor si no se veia ningun lugar donde importaran las clases php que decian de api,

Voy a checar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:35.