-
Re: DLL Object
Cette extension ressemble énormément à Call DLL avec quelques options en plus et une bonne documentation. Je me sens maintenant à la maison avec MMF 2 [img]/epicentre/images/%%GRAEMLIN_URL%%/grin.gif[/img] (l'affichage des paramètres de DLL Object dans le débogueur est pratique d'ailleurs)
J'ai migré une petite appli de MMF 1.5 + Call DLL à MMF 2.0 + DLL Object et le tout fonctionne correctement.
Quelques remarques pour la route :
Lors de l'événement On Error, il n'y a aucune protection contre d'autres levées d'événements. C'est-à-dire, si une erreur se produit lors de l'utilisation de l'objet et que le traitement de cette erreur génère une autre erreur, il y a un risque d'appel récursif de cet événement finissant par crasher l'application.
Parfois il est préféreable de traiter une erreur juste après un appel plutôt que par levée d'événement. Le traitement est alors directement associé à l'appel précédent. Mais ce genre de traitement est difficile car la dernière erreur levée est conservée sans possibilité de l'effacer. Biensûr, en utilisant une variable quelconque il est possible de contourner le problème mais il serait plus simple d'avoir une action du genre Clear last error.
L'utilisation de messages d'erreur plutôt que des codes d'erreur est à réfléchir... L'avantage des messages d'erreur est qu'ils présentent directement une explication du problème, l'inconvénient est que dissocier le traitement d'une erreur d'une autre peut devenir problématique. Il suffit que la chaîne soit modifiée pour qu'un traitement ne soit plus déclenché (problème de maintenance).
L'action Unload DLL lève une erreur si aucune DLL n'est chargée. A mon goût, cette action devrait décharger sans discuter l'objet qu'il y ait une DLL chargée ou non. En effet le résultat final est le même : il n'y a pas/plus de DLL chargée après l'appel de cette action. Ou alors au moins ajouter une condition du genre A DLL is loaded.
Une question :
Est-ce qu'il est nécessaire d'effectuer un déchargement manuel des DLLs chargées à la fin de la scène ou est-ce que l'extension s'en charge ?
Par exemple la DLL user32.dll peut être utilisée relativement fréquemment. Afin d'éviter de charger-décharger celle-ci sans cesse, je la charge au début de la scène. Est-ce qu'il faut que je la décharge manuellement à la fin de la scène ?
Tant que j'y suis :
Contrairement à Call DLL, l'extension de la librairie (.dll) doit être spécifiée lors du chargement. Ce n'est pas plus mal mais à savoir.
Puisqu'il est possible d'ajouter des arguments, il serait intéressant de pouvoir déterminer le nombre d'arguments définis actuellement dans l'objet. Bon pour ma part je préfère le placement explicite des arguments que je trouve plus sûr [img]/epicentre/images/%%GRAEMLIN_URL%%/wink.gif[/img]
-
Re: DLL Object
Pas la peine de décharger la DLL en fin de scène, c'est fait automatiquement.
Je ne comprends pas ceci : "il serait intéressant de pouvoir déterminer le nombre d'arguments définis actuellement dans l'objet".
Merci pour les suggestions, je vais noter ça.
-
Re: DLL Object
Je pense qu'il veut dire qu'il faudrait une expression pour récupérer le nombre d'arguments actuellement ajoutés à l'extension (via les actions) en vu d'appeler une fonction de la DLL. [img]/epicentre/images/%%GRAEMLIN_URL%%/wink.gif[/img]
-
Re: DLL Object
Tout-à-fait Sphax, c'est ce à quoi je pensais. Une fonction Count (size, length, ...) qui retourne le nombre d'arguments définis actuellement.
<div class="ubbcode-block"><div class="ubbcode-header">Posté à l'origine par: Yves</div><div class="ubbcode-body">Pas la peine de décharger la DLL en fin de scène, c'est fait automatiquement.</div></div>
Ok, parfait !