|
|
|
|
|
- Contrôles effectués
- Gestion des erreurs
- Paramètres à passer à la méthode de la DLL
- Passer une chaîne à une DLL ou récupérer une chaîne en retour d'une DLL
- Passer une structure contenant une chaîne à une DLL
- Procédure appelée en CallBack
- Divers
AppelInterface (Fonction) En anglais : CallInterface Exécute une méthode d'une interface d'un objet implémenté dans une DLL externe au framework WINDEV. Cet objet peut être un objet C++ ou un objet COM. nAllocateur est un entier système API("ole32", "CoGetMalloc", 1, &nAllocateur) nMémoire est un entier système = AppelInterface(nAllocateur, 3, 1024)
Syntaxe
Utilisation du numéro de la méthode Masquer les détails
<Résultat> = AppelInterface(<Adresse de l'objet> , <Numéro de la méthode> [, <Paramètre 1> [... [, <Paramètre N>]]])
<Résultat> : Entier sur 4 en 32 bits, entier sur 8 en 64 bits Résultat de l'exécution de la méthode. Ce résultat peut être un code d'erreur. Le type de ce résultat dépend de la méthode exécutée. Consultez la documentation de la méthode pour obtenir plus de détails. Si le résultat de la méthode est d'une taille supérieure à la taille de l'entier de la plateforme, il ne pourra pas être récupéré. <Adresse de l'objet> : Entier système Adresse de l'objet sur lequel une méthode doit être appelée. Cette adresse est en général le résultat de l'appel précédent d'une API. <Numéro de la méthode> : Entier Numéro d'ordre de la méthode dans la table des méthodes virtuelles. ATTENTION :
- le numéro d'ordre tient compte des classes de base
- le numéro d'ordre commence à 0.
<Paramètre 1> : Type correspondant au paramètre Premier paramètre à passer à la méthode. Ces paramètres doivent être du même type que les paramètres attendus par la méthode. Sont utilisables : - les types "simples" (voir Notes),
- les structures (voir Notes),
- un nom de procédure WLangage. Cette procédure sera rappelée par la méthode (voir Notes).
<Paramètre N> : Type correspondant au paramètre Nième paramètre à passer à la méthode. Ces paramètres doivent être du même type que les paramètres attendus par la méthode. Sont utilisables : - les types "simples" (voir Notes),
- les structures (voir Notes),
- un nom de procédure WLangage. Cette procédure sera rappelée par méthode (voir Notes).
Utilisation d'une variable de type Description d'API Masquer les détails
<Résultat> = AppelInterface(<Adresse de l'objet> , <API à  exécuter> [, <Paramètre 1> [... [, <Paramètre N>]]])
<Résultat> : Entier sur 4 en 32 bits, entier sur 8 en 64 bits Résultat de l'exécution de la méthode. Ce résultat peut être un code d'erreur. Le type de ce résultat dépend de la méthode exécutée. Consultez la documentation de la méthode pour obtenir plus de détails. Si le résultat de la méthode est d'une taille supérieure à la taille de l'entier de la plateforme, il ne pourra pas être récupéré. <Adresse de l'objet> : Entier système Adresse de l'objet sur lequel une méthode doit être appelée. Cette adresse est en général le résultat de l'appel précédent d'une API. <API à exécuter> : Variable de type Description d'API Variable de type Description d'API contenant les caractéristiques de la méthode à exécuter. <Paramètre 1> : Type correspondant au paramètre Premier paramètre à passer à la méthode. Ces paramètres doivent être du même type que les paramètres attendus par la méthode. Sont utilisables : - les types "simples" (voir Notes),
- les structures (voir Notes),
- un nom de procédure WLangage. Cette procédure sera rappelée par la méthode (voir Notes).
<Paramètre N> : Type correspondant au paramètre Nième paramètre à passer à la méthode. Ces paramètres doivent être du même type que les paramètres attendus par la méthode. Sont utilisables : - les types "simples" (voir Notes),
- les structures (voir Notes),
- un nom de procédure WLangage. Cette procédure sera rappelée par méthode (voir Notes).
Remarques La fonction AppelInterface est protégée contre les "Erreurs de protection générale" dans la méthode appelée. Néanmoins, si une erreur de ce type se produit, une erreur WLangage est déclenchée. Lors de l'exécution de méthodes, si le résultat renvoyé correspond à une erreur, utilisez la fonction ErreurInfo pour obtenir plus d'informations sur l'erreur (avec la constante errCodeSystème ou errMessageSystème). Paramètres à passer à la méthode de la DLL Ces paramètres doivent être du même type que les paramètres attendus par la méthode. Les types utilisables sont les suivants : - Les types "simples" (entier, réel, et booléen). L'utilisation d'un autre type WLangage provoque une erreur du WLangage.
Si la méthode à exécuter attend un pointeur ou un handle Windows, utilisez un entier système. Si la méthode à exécuter attend une adresse, utilisez l'opérateur &. - Les types "chaîne".
- Les types structure.
- Un nom de procédure WLangage. Cette procédure sera rappelée par la méthode de la DLL (voir paragraphe ci-dessous).
Les paramètres dépendent de la méthode exécutée. Consultez la documentation de cette méthode pour obtenir plus de détails.
Passer une chaîne à une DLL ou récupérer une chaîne en retour d'une DLL - En paramètre d'entrée, utilisez le type chaîne. Par exemple :
sChaine est une chaîne AppelInterface(<Adresse de l'objet>, <Numéro de la méthode>, sChaîne) - En paramètre de sortie, le C n'est pas capable de gérer des chaînes dynamiques de manière simple. Il est donc nécessaire :
- soit de fixer une taille maximale, avec le type "Chaîne sur". Par exemple :
sChaine est une chaîne sur 100 AppelInterface(<Adresse de l'objet>, <Numéro de la méthode>, sChaîne) // dans Methode en C : // STRNCPY(PointeurEnC, "Test", 100) - soit de récupérer les adresses des chaînes en C (mais dans ce cas, la partie de code en C doit assurer la "survie" des chaînes renvoyées), puis de transférer la chaîne dans une variable de type chaîne grâce à la fonction ChaîneRécupère. Par exemple :
nAdresseChaîne est un entier système API(<Adresse de l'objet>, <Numéro de la méthode>, &nAdresseChaîne) sChaine est une chaîne sChaine = ChaîneRécupère(nAdresseChaîne, crAdresseASCIIZ) // dans Méthode en C : *PointeurEnC = "Test"
- En valeur de retour, récupérer les adresses des chaînes en C (mais dans ce cas, la partie de code en C doit assurer la "survie" des chaînes renvoyées), puis transférer la chaîne dans une variable de type chaîne grâce à la fonction ChaîneRécupère. Par exemple :
nAdresseChaîne est un entier système nAdresseChaîne = AppelInterface(<Adresse de l'objet>, <Numéro de la méthode>) sChaine est une chaîne sChaine = ChaîneRécupère(nAdresseChaîne, crAdresseASCIIZ) // dans Méthode en C : Return PointeurEnC
Passer une structure contenant une chaîne à une DLL - En entrée, le code à utiliser est le suivant :
Struct est une structure sChaine est une chaîne FIN UneStruct est une Struct AppelInterface(<Adresse de l'objet>, <Numéro de la méthode>, &UneStruct) - En sortie, le C n'est pas capable de gérer des chaînes dynamiques de manière simple. Il est donc nécessaire de :
- soit fixer une taille maximale et faire une copie dans la mémoire du WLangage. Par exemple :
sChaine est une chaîne sur 100 Struct est une structure aChaine est un entier FIN UneStruct est une Struct UneStruct:aChaine = &sChaine AppelInterface(<Adresse de l'objet>, <Numéro de la méthode>, &UneStruct) // dans Methode en C : // STRNCPY(StructEnC->PointeurEnC, "Test", 100) - soit récupérer les adresses des chaînes en C (mais dans ce cas, la partie de code en C doit assurer la "survie" des chaînes renvoyées). Par exemple :
sChaine est une chaîne Struct est une structure aChaine est un entier FIN UneStruct est une Struct AppelInterface(<Adresse de l'objet>, <Numéro de la méthode>, &UneStruct) sChaine = ChaîneRécupère(UneStruct:aChaine, crAdresseASCIIZ ) // dans Methode en C : StructEnC->PointeurEnC = "Test"
Procédure appelée en CallBack Certaines méthodes attendent en paramètre l'adresse d'une procédure "CallBack" : cette procédure sera rappelée par la méthode de la DLL. Pour utiliser une procédure callback en WLangage : 1. Créez la procédure callback dans votre projet Pour récupérer les paramètres, il faut décrire exactement les paramètres attendus par la fonction "CallBack". Dans le cas contraire, des "erreurs de protection générale" peuvent survenir. PROCEDURE <Nom de la procédure> (<Param1> est [un] <Type1>, ... <Param2> est [un] <Type2>) Remarques : - Les types doivent correspondre à ceux décrits dans la documentation de la DLL.
- Les paramètres sont obligatoirement passés par valeur. Pour récupérer un paramètre par référence :
- Utilisez un entier.
- Avec la fonction Transfert, récupérez ou affectez la véritable valeur.
2. Modifiez l'appel de la méthode en conséquence. Utilisez la syntaxe suivante : AppelInterface(<Adresse de l'objet>, <Numéro de la méthode>, ... &<Nom de la procédure CallBack>)
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|