Salut Yannick,

Comme je vois que ton mail a suscité beaucoup de réactions, je me permets d'envoyer ma petite contribution dans le tas, en espérant que tu auras le temps de la lire lol !

Mdrrrr...

Tout d'abord, un grand merci à toi de partager avec nous ces techniques modernes d'accès aux méthodes d'une DLL externe en JavaScript.

Je pense que tu dois certainement déjà du avoir utilisé les accès FFI en langage lua, par exemple, ou l'accès aux API sous la forme d'objets com, en VBScript, langage script de JAWS, etc...

Revenons à ta question initiale :

La méthode declare de ton objet lib requiert plusieurs paramètres, selon le fait que tu fasses appel à une fonction externe figurant dans la dll, ou uniquement à une propriété.

Si c'est juste une propriété, tu as juste besoin de son nom sous la forme d'une chaîne de caractères en premier paramètre, et à sont type en C en second paramètre.

C'est d'ailleurs bien documenté ici :

https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/Library#declare%28%29

Cependant, si c'est une fonction, voici ce dont tu vas avoir besoin.

1. Le nom de la fonction en premier paramètre sous la forme d'une chaîne de caractères.

2. Une constante ABI (Application Binary Interface), qui va permettre à ton JavaScript de mieux pouvoir savoir comment se comporter avec cette fonction.

Par exemple, si c'est une fonction figurant dans une DLL Windows, il faudra juste mettre ctypes.winapi_abi ou ctypes.stdcall_abi.

Comme dans ton cas, ce n'est pas le cas, tu dois mettre ctypes.default_abi.

3. Le troisième paramètre te demande d'indiquer le type en C du retour de ta fonction.

4. À partir de ce paramètre 4, tu dois fournir les différents types en C de chaque paramètres de ta fonction, si bien sûr, celle-ci comporte des paramètres.

Si ce n'est pas le cas, on s'arrête au paramètre 3.

Cette méthode declare de l'objet library devrait retourner une fonction, qui va cibler la propriété ou méthode demandée, selon le contexte.

Donc, premier réflexe à avoir, bien scruter les différentes fonctions et propriétés de ta DLL, pour mieux savoir comment les exploiter.

Voili voilou, merci à toi.

Bien amicalement,
Abdel.


Le 26/05/2017 à 02:40, yannick a écrit :
bonjour, comme toujours, je m'écroule juste devant le verre à sangria .
je suis dans thunderbird, et je souhaite utiliser universal speech.
pour cela j'importe le module ctypes
(Components.utils.import("resource://gre/modules/ctypes.jsm");
puis j'ouvre la dll de  cette manière :
us =ctypes.open ("C:/UniversalSpeech/bin/UniversalSpeech.dll")
et c'est maintenant que je bloque parce que je dois faire une déclaration et je ne comprends pas trop les paramètres,. je vous fais un copié collé,, et si vous avez une idée,cela me dépannera, merci !
declare()
Declares an API from the native library, allowing it to be used from JavaScript. This can be used both for exported data symbols and for functions.
CData declare(
  name[,
  abi,
  returnType
  argType1,
  ...]
);
Parameters
name
The name of the symbol exported by the native library that is to be declared as usable from JavaScript
abi
The ABI used by the exported function; this will be ctypes.default_abi for most libraries, except for Windows libraries, which will be ctypes.winapi_abi or ctypes.stdcall_abi. See ABI constants. You don't need to provide this for exported data; it's only needed for function declarations.
returnType
The CType type returned by the defined API, if it's a function. This parameter should not be provided if the API is an exported data symbol.
argType1...argTypeN
Zero or more parameter CType may be specified for the parameters of the function being declared. These should not be provided if the API is an exported data symbol rather than a function.
Return value
A FunctionTypeCData object representing the declared API.
Exceptions thrown
• ctypes
• CType
• FunctionType
• ABI
TypeError
The return type was specified as an array.



source
https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/Library

Progliste :
Pour se d�sinscrire de la liste : mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO
Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je vous r�pondrez en priv�.




Progliste :
Pour se d�sinscrire de la liste : 
mailto:[email protected]?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/[email protected]/       

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO
Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je 
vous r�pondrez en priv�.
        
        

Répondre à