OVH Cloud OVH Cloud

appel DLL avec w32api

6 réponses
Avatar
Yann
J'ai besoin de récupérer des données venant d'une appli Windows, qu'il
est possible de piloter avec une DLL et non par COM.
J'ai essayé
d'utiliser les fonctionnalités w32api de php version 4.3.0 Mais j'ai un
message indiquant que les fonctions sont inconnues dans la dll w32 de
php, j'ai vérifié la syntaxe c'est OK. Alors est-ce toujours possible
d'utiliser cette fonctionnalité de PHP

Merci à vous

6 réponses

Avatar
loufoque
Yann wrote:

J'ai besoin de récupérer des données venant d'une appli Windows, qu'il
est possible de piloter avec une DLL et non par COM.
J'ai essayé
d'utiliser les fonctionnalités w32api de php version 4.3.0 Mais j'ai un
message indiquant que les fonctions sont inconnues dans la dll w32 de
php, j'ai vérifié la syntaxe c'est OK. Alors est-ce toujours possible
d'utiliser cette fonctionnalité de PHP

Merci à vous


http://wobster.mynnga.de/w32api.txt
Doc pour PHP4.3.1

Pour PHP5+, ce sera encore différent (extension FFI)

Avatar
Yann
In <cav7a6$q6m$ loufoque wrote:

http://wobster.mynnga.de/w32api.txt
Doc pour PHP4.3.1

Pour PHP5+, ce sera encore différent (extension FFI)



Merci pour la doc, mais en voulant l'implémenter avec ma DLL, ça ne
fonctionne pas, ma DLL ne passe pas les argument par réference mais par
valeur (info venant du producteur de la DLL, donc pas de "&" devant les
argument), j'ai suivie la doc mais mon code est plantogène.
le voici

dl("php_w32api.dll");
$api=new win32;

$api->registerfunction("long Docubase (long Ctx, long hWnd, long Func,
string BuffInOut) From dbtlkt32.dll");
$api->registerfunction("long Docubase2 (long Ctx, long hWnd, long Func,
string BuffIn, string BuffOut, long SizeBuffOut) From dbtlkt32.dll");


$version=$api->Docubase2(0,0,1003,0,0,0);
echo("Version Docubase : ".$version);

Avatar
loufoque
Yann wrote:

mon code est plantogène.
À quel niveau ?


Avatar
Yann
Le code plante php.exe sur mon Win2000 à la ligne suivante

$version=$api->Docubase2(0,0,1003,0,0,0);

j'ai la vaque impression que la DLL, n'est pas clean, ou bien le module
W32api a du mal à passer les variables autrement que par référence.
A titre d'info voici la définition des params de la fonction utlisée

$api->registerfunction("long Docubase2 (long Ctx, long hWnd, long Func,
string BuffIn, string BuffOut, long SizeBuffOut) From dbtlkt32.dll");


Ctx : Contexte de travail du toolkit
hWnd : Handle de le fenêtre (windows) qui sera désignée comme étant le
conteneur des messages d'erreur ou d'info
Func : Identifiant des fonctions du toolkit
BuffInOut : buffer utilisé non seulement pour passer des params à un
fonction mais aussi pour récupérer les données renvoyées par cette
dernière.
BuffIn : Utilisé pour passer les params à une fonction
BuffOut : utilisé pour récupérer des données renvoyées par une fonction
SizeBuffOut : Taille du buffer de sortie BuffOut

Le pire c'est qu'en VB ce code ne pose aucun problème, c'est vrai que VB
n'est pas php

In <cb7njk$r5u$ loufoque wrote:

mon code est plantogène.
À quel niveau ?





Avatar
loufoque
Yann wrote:

j'ai la vaque impression que la DLL, n'est pas clean, ou bien le module
W32api a du mal à passer les variables autrement que par référence.


Apparement. Mais bon en même temps c'est un module experimental.
Je vois pas trop ce qu'on peut faire pour régler ton problème, désolé.

Avatar
Yann
Pour l'instant je laisse tomber, peut-être avec PHP5 ce sera mieux, y a
plus qu'à attendre...

In <cbec7q$arv$ loufoque wrote:


Apparement. Mais bon en même temps c'est un module experimental.
Je vois pas trop ce qu'on peut faire pour régler ton problème, désolé.