J'ai voulu essayer VBScript pour tester des appels à un serveur COM
dynamique.
Et ça plante...
Exemples de messages d'erreur :
MsgBox oa.builtin___upper("aa zz ee rr tt yy")
xxx.vbs(3, 1) Erreur d'exécution Microsoft VBScript: Utilisation non
autorisée de Null: 'oa.builtin___upper(...)'
Set vret = px.retouridem("AZERTY")
xxx.vbs(4, 1) Erreur d'exécution Microsoft VBScript: Cet objet ne gère
pas cette propriété ou cette méthode: 'px.retouridem'
MsgBox oa.sinverse("aa zz ee rr tt yy")
xxx.vbs(5, 1) Erreur de compilation Microsoft VBScript: Instruction
attendue
Alors que tout est correct.
Quelques précisions :
- Dans un serveur COM dynamique, les fonctions ne sont pas définies à
l'avance. Il n'y a donc aucune bibliothèque de type possible. C'est le
serveur qui doit traiter l'appel.
- en l'occurrence, le serveur reçoit bien l'appel, mais VBscript envoie
un paramètre DISPATCH_PROPERTYGET au lieu de DISPATCH_METHOD
- d'ailleurs, les appels fonctionnent, pour des propriétés ; ça
n'accroche que pour les fonctions.
- il arrive souvent qu'un appel COM dynamique se fasse en deux temps : le
client envoie une requête de propriété, le serveur envoie une erreur
DISP_E_MEMBERNOTFOUND, et le client devrait renvoyer la requête de fonction.
Mais VBscript n'a pas l'air de gérer ça.
- côté serveur, j'ai essayé de forcer un appel à la fonction, mais ça
plante pareil.
- VBscript ne supporte pas l'appel avec des points multiples. Par
exemple, "oa.builtin.upper(" donne "Erreur d'exécution Microsoft VBScript:
Objet requis:" ; pour contourner cela, j'utilise un remplacement, à la
volée, d'un triple souligné par un point. Cela fonctionne avec d'autres
langages, et avec les propriétés pour VBscript.
- ça fonctionne avec d'autres langages (Python, Ruby, ObjectPal/Paradox),
alors, pourquoi ça accroche avec VBscript ?
- ça plante pareillement avec JScript.
Si quelqu'un avait une idée de solution, je l'en remercie d'avance.
J'ai voulu essayer VBScript pour tester des appels à un serveur COM dynamique.
Il est écrit dans quel language le serveur com ?
Amicalement,
-- Jean - JMST Belgium
Michel Claveau
Re !
Il est écrit dans quel language le serveur com ?
En Python 2.4.3 + PyWin32. Avec une double entrée : classique (statique) et dynamique (comprenant 2000 fonctions, dont plus de la moitié appelable directement, si ça marche).
-- @-salutations
Michel Claveau
Re !
Il est écrit dans quel language le serveur com ?
En Python 2.4.3 + PyWin32. Avec une double entrée : classique
(statique) et dynamique (comprenant 2000 fonctions, dont plus de la
moitié appelable directement, si ça marche).
En Python 2.4.3 + PyWin32. Avec une double entrée : classique (statique) et dynamique (comprenant 2000 fonctions, dont plus de la moitié appelable directement, si ça marche).
-- @-salutations
Michel Claveau
Jean
Re !
Il est écrit dans quel language le serveur com ?
En Python 2.4.3 + PyWin32. Avec une double entrée : classique (statique) et dynamique (comprenant 2000 fonctions, dont plus de la moitié appelable directement, si ça marche).
Je ne connais pas assez Python mais je suppose que c'est l'utilisation de PyWin32 dans Python qui vous permet de faire ça, parceque sans language dit "de haut niveau", je ne voyais à la limite qu'un petit chipo avec un fichier WSC pour faire ça.
Je jetterai un coup d'oeil si je trouve le temps.
Sinon amha c'est un problème de construction de vos méthodes (en Python si j'ai bien compris) puisqu'il me semble évident que vos méthodes sont prises pour des propriétés par VBS/JS.
Il faudrait aussi demander sur un groupe Python amha.
Amicalement,
-- Jean - JMST Belgium
Re !
Il est écrit dans quel language le serveur com ?
En Python 2.4.3 + PyWin32. Avec une double entrée : classique (statique) et
dynamique (comprenant 2000 fonctions, dont plus de la moitié appelable
directement, si ça marche).
Je ne connais pas assez Python mais je suppose que c'est l'utilisation
de PyWin32 dans Python qui vous permet de faire ça, parceque sans
language dit "de haut niveau", je ne voyais à la limite qu'un petit
chipo avec un fichier WSC pour faire ça.
Je jetterai un coup d'oeil si je trouve le temps.
Sinon amha c'est un problème de construction de vos méthodes (en Python
si j'ai bien compris) puisqu'il me semble évident que vos méthodes sont
prises pour des propriétés par VBS/JS.
Il faudrait aussi demander sur un groupe Python amha.
En Python 2.4.3 + PyWin32. Avec une double entrée : classique (statique) et dynamique (comprenant 2000 fonctions, dont plus de la moitié appelable directement, si ça marche).
Je ne connais pas assez Python mais je suppose que c'est l'utilisation de PyWin32 dans Python qui vous permet de faire ça, parceque sans language dit "de haut niveau", je ne voyais à la limite qu'un petit chipo avec un fichier WSC pour faire ça.
Je jetterai un coup d'oeil si je trouve le temps.
Sinon amha c'est un problème de construction de vos méthodes (en Python si j'ai bien compris) puisqu'il me semble évident que vos méthodes sont prises pour des propriétés par VBS/JS.
Il faudrait aussi demander sur un groupe Python amha.
Amicalement,
-- Jean - JMST Belgium
Méta-MCI
Bonsoir !
Le problème, c'est que ça marche avec Python, Object-Pal, et Ruby. Mais, ça ne marche pas avec VBscript, ni Jscript.
Je partage l'avis, sur le fait que VBS prend les méthodes pour des propriétés. Mais, il faut voir que les méthodes n'existent pas, telles qu'appelées, car le serveur peut très bien faire autre chose que ce qui est demandé...
Par exemple, VBscript refuse une construction de ce genre :
Set obj = WScript.CreateObject("Toto.aaa") Set vret = obj.bib.str.sinverse("AZERTY") (à cause des points multiples)
J'ai contourné le problème, en interceptant le triple souligné. Donc, lorsque VBS fait :
Set obj = WScript.CreateObject("Toto.aaa") Set vret = obj___bib___str___sinverse("AZERTY")
Le serveur traite obj.bib.str.sinverse("AZERTY")
Et le tour est joué... sauf avec VBS/JS.
Mais je cherche... lorsque j'ai le temps...
@+
MCI
Bonsoir !
Le problème, c'est que ça marche avec Python, Object-Pal, et Ruby.
Mais, ça ne marche pas avec VBscript, ni Jscript.
Je partage l'avis, sur le fait que VBS prend les méthodes pour des
propriétés. Mais, il faut voir que les méthodes n'existent pas, telles
qu'appelées, car le serveur peut très bien faire autre chose que ce qui est
demandé...
Par exemple, VBscript refuse une construction de ce genre :
Set obj = WScript.CreateObject("Toto.aaa")
Set vret = obj.bib.str.sinverse("AZERTY")
(à cause des points multiples)
J'ai contourné le problème, en interceptant le triple souligné. Donc,
lorsque VBS fait :
Set obj = WScript.CreateObject("Toto.aaa")
Set vret = obj___bib___str___sinverse("AZERTY")
Le problème, c'est que ça marche avec Python, Object-Pal, et Ruby. Mais, ça ne marche pas avec VBscript, ni Jscript.
Je partage l'avis, sur le fait que VBS prend les méthodes pour des propriétés. Mais, il faut voir que les méthodes n'existent pas, telles qu'appelées, car le serveur peut très bien faire autre chose que ce qui est demandé...
Par exemple, VBscript refuse une construction de ce genre :
Set obj = WScript.CreateObject("Toto.aaa") Set vret = obj.bib.str.sinverse("AZERTY") (à cause des points multiples)
J'ai contourné le problème, en interceptant le triple souligné. Donc, lorsque VBS fait :
Set obj = WScript.CreateObject("Toto.aaa") Set vret = obj___bib___str___sinverse("AZERTY")
Le serveur traite obj.bib.str.sinverse("AZERTY")
Et le tour est joué... sauf avec VBS/JS.
Mais je cherche... lorsque j'ai le temps...
@+
MCI
Méta-MCI
Problème résolu.
J'ai modifié mon serveur, pour qu'il traite les appels à la sauve VBS (propriété + méthode mélangées), en plus des appels normaux (successivement propriété, puis méthode, si la propriété est inexistante).
Résultat : ça marche.
Conclusion : toutes les fonctions dynamiques de Ponx peuvent être utilisées depuis VBscript et Jscript. Mais aussi, du coup, avec Auto-It (mon dernier test réussi).
Je vais pouvoir m'éclater, à scripter dans tous les sens...
Bonne nuit
Michel Claveau
Problème résolu.
J'ai modifié mon serveur, pour qu'il traite les appels à la sauve VBS
(propriété + méthode mélangées), en plus des appels normaux (successivement
propriété, puis méthode, si la propriété est inexistante).
Résultat : ça marche.
Conclusion : toutes les fonctions dynamiques de Ponx peuvent être utilisées
depuis VBscript et Jscript. Mais aussi, du coup, avec Auto-It (mon dernier
test réussi).
Je vais pouvoir m'éclater, à scripter dans tous les sens...
J'ai modifié mon serveur, pour qu'il traite les appels à la sauve VBS (propriété + méthode mélangées), en plus des appels normaux (successivement propriété, puis méthode, si la propriété est inexistante).
Résultat : ça marche.
Conclusion : toutes les fonctions dynamiques de Ponx peuvent être utilisées depuis VBscript et Jscript. Mais aussi, du coup, avec Auto-It (mon dernier test réussi).
Je vais pouvoir m'éclater, à scripter dans tous les sens...