Appel de fonctions natives dans les bibliothèques de liens dynamiques
Epson RC+ 8.0 vous permet d'appeler des fonctions natives dans les bibliothèques de liens dynamiques (DLL).
Ceci est utilisé pour un traitement arithmétique compliqué et appelle une fonction native d'un périphérique externe.
Pour appeler la fonction DLL native, utilisez une instruction Declare qui est une commande de définition de fonction depuis le programme SPEL+ et écrivez un appel de fonction comme à l'habitude.
Pour plus de détails, reportez-vous au manuel suivant.
"SPEL+ Language Reference - Declare"
Exemple d'appel d'une DLL native
En utilisant un outil de développement tel que Microsoft Visual Studio 2019, vous pouvez créer une DLL native pouvant être appelée depuis SPEL+. Ici, Visual Studio 2019 est utilisé comme exemple pour créer une fonction qui exécute l'opérateur arithmétique.
Étape 1 : Décider du type de variable pour une DLL native
Vous devez planifier le type de données à utiliser pour le transfert avec la DLL native dans Epson RC+ 8.0. Le tableau de correspondance pour le type de données d'Epson RC+ 8.0 et le type de variable C/C++ est affiché ci-dessous. Vous ne pouvez pas utiliser le type d'octet et la structure C/C++, car Epson RC+ 8.0 ne dispose pas de données correspondantes.
Correspondance des données
| Epson RC+ 8.0 | C/C++ |
|---|---|
| Boolean | short |
| Byte | short |
| Short | short |
| Integer | short |
| Long | int |
| Real | float |
| Double | double |
| String | char [256] * Nul inclus |
Étape 2 : Créer une DLL native
Démarrez Visual Studio 2019.
Sélectionnez "Créer un nouveau projet" dans la fenêtre de départ.
La boîte de dialogue [Créer un nouveau projet] s'affiche.
Sélectionnez "Assistant de bureau Windows" dans la liste des modèles de projet affichée à droite de la boîte de dialogue.
Cliquez sur le bouton [Suivant].
Démarrez l'assistant de bureau Windows.
Tapez un nom de projet dans la zone [Nom du projet]. (Ici, tapez "MyCalculator".)
Cliquez sur le bouton [Créer].
Définissez les options du projet.
Sélectionnez la "Dynamic Link Library (.dll)" dans le [Type d'application].
Cochez la zones [Exporter les symboles] dans les [Options supplémentaires :].
Cliquez sur le bouton [OK].
Un exemple simple de fonction "fnMyCalculator" est créé dans MyCalculator.cpp. Ajoutez une fonction MyArithmetic qui exécute l'opérateur arithmétique dans ce fichier.
MYCALCULATOR_API float MyArithmetic(short value1, short value2, char * kind ) { if ( !strcmp(kind, "add") ) { return (float)(value1 + value2); } else if ( !strcmp(kind, "sub") ) { return (float)(value1 - value2); } else if ( !strcmp(kind, "mul") ) { return (float)(value1 * value2); } else if ( !strcmp(kind, "div") ) { return (float)(value1) / (float)(value2); } else { strcat_s(kind, 10, " NG"); return 0; } }Exportez une fonction pour lui permettre d'être appelée depuis SPEL+.
Sélectionnez le menu Visual Studio 2019-[Projet]-[Ajouter un nouvel élément]. La boîte de dialogue [Ajouter un nouvel élément] s'affiche.
Sélectionnez [Visual C++]-[Code] dans l'arborescence à gauche.
Sélectionnez "Module-Fichier de définition (.def)" dans la liste des modèles de projet affichée au centre de la boîte de dialogue.
Tapez un nom de fichier dans [Nom :]. (Ici, tapez "MyCalculator.def" comme nom de fichier.)
Cliquez sur le bouton [Ajouter (A)].
Enregistrez "fnMyCalculator function" et "MyArithmetic function" dans le fichier "MyCalculator.def" créé.
LIBRARY "MyCalculator" EXPORTS fnMyCalculator MyArithmetic
Générez le projet et créez la DLL. Sélectionnez [Win32] comme plate-forme de solution pour Visual Studio 2019. Sélectionnez ensuite le menu Visual Studio 2019-[Construire]-[Construire MyCalculator]. La DLL est créée avec succès si aucune erreur ne se produit.
POINTS CLÉS
Dans Epson RC+ 8.0, la DLL native 64 bits n'est pas disponible. Lors de l'utilisation d'une DLL créée avec une version antérieure à Visual Studio 2015, il est nécessaire d'installer au préalable l'exécution correspondant à cette version.
Étape 3 : Appelez la fonction DLL depuis SPEL+
POINTS CLÉS
Vous pouvez maintenant essayer votre fonction DLL à partir de SPEL+. Avant d'appeler votre fonction depuis Epson RC+ 8.0, vous devez la déboguer et vérifier soigneusement si elle peut fonctionner sans erreur. Si cette erreur se produit (telle qu'une erreur système) dans la fonction native, Epson RC+ 8.0 ne fonctionnera pas normalement.
Copiez le fichier MyCalculator.dll créé dans le dossier du projet Epson RC+ 8.0 (par ex.,
C:\EpsonRC80\projects\dllcall).Définissez une fonction DLL qui exécute l'opérateur arithmétique dans le programme SPEL+ et écrivez un appel de fonction pour MyArithmetic dans Fonction principale.
Declare MyArithmetic, "MyCalculator.dll"(value1 As Integer, value2 As Integer, ByRef calc$ As String) As Real Function main Real result; String calc$ calc$ = "add" result = MyArithmetic(1, 2, ByRef calc$); Print "1+2=", Str$(result) calc$ = "sub" result = MyArithmetic(1, 2, ByRef calc$); Print "1-2=", Str$(result) calc$ = "mul" result = MyArithmetic(1, 2, ByRef calc$); Print "1*2=", Str$(result) calc$ = "div" result = MyArithmetic(1, 2, ByRef calc$); Print "1/2=", Str$(result) FendCréez et exécutez le projet. Le résultat suivant s'affiche.
1+2=3 1-2=-1 1*2=2 1/2=0.5
POINTS CLÉS
Avant de construire le projet, assurez-vous de copier la DLL native dans le dossier du projet sans faute. En cas d'échec, un avertissement ou une erreur se produit.
Veuillez noter la dépendance de la DLL lors de l'utilisation d'une DLL tierce comme DLL native. Si la DLL dépendante n'existe pas dans le dossier du projet ou dans le dossier défini dans la variable d'environnement PATH de Windows, un avertissement ou une erreur se produit.