DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion de Windows / Fonctions diverses Windows
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
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.
Exemple
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

Contrôles effectués

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.

Gestion des erreurs

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

  1. 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)
  2. 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"
  3. 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

  1. 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)
  2. 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 :
    1. Utilisez un entier.
    2. 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>)
Etats et RequêtesWindowsCode Utilisateur (MCU)

Divers

  • La fonction AppelInterface ne bloque pas les autres threads.
  • Si la méthode de la DLL appelée modifie les paramètres systèmes régionaux, les paramètres régionaux précédents sont restaurés.
La fonction APIParamètre permet de configurer le comportement par défaut de cette fonction.
Composante : wd300vm.dll
Version minimum requise
  • Version 11
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 25/05/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale