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 l'objet COM
  • Passer une chaîne à une méthode d'objet COM ou récupérer une chaîne en retour de l'appel d'une méthode d'objet COM
  • Passer une structure contenant une chaîne à une méthode d'objet COM
  • 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
Exécute une méthode d'une interface d'un objet COM instancié grâce à la fonction COMCréeInstance.
Exemple
// Initialisation d'une chaîne Unicode de 260 caractères
PapierPeint est une chaîne UNICODE
PapierPeint = AnsiVersUnicode(Répète(" ", 260))
 
// Déclaration d'une variable de type COMObjet
ActiveDesktop est un COMObjet
 
// Récupération de l'interface de manipulation du bureau
ActiveDesktop = COMCréeInstance("75048700-EF1F-11D0-9888-006097DEACF9", ...
"F490EB00-1240-11D1-9888-006097DEACF9")
SI ErreurDétectée = Faux ALORS
// Récupération de l'image de papier peint du bureau
COMAppelleMéthode(ActiveDesktop, 4, &PapierPeint, 260, 1)
 
Info("L'image du bureau est : " + UnicodeVersAnsi(PapierPeint))
FIN
Syntaxe

Utilisation du numéro de la méthode Masquer les détails

<Résultat> = COMAppelleMéthode(<Objet COM> , <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é.
<Objet COM> : Variable de type COMObjet
Interface de l'objet COM obtenue avec la fonction COMCréeInstance.
<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 la méthode (voir Notes).

Utilisation d'une variable de type Description d'API Masquer les détails

<Résultat> = COMAppelleMéthode(<Objet COM> , <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é.
<Objet COM> : Variable de type COMObjet
Interface de l'objet COM obtenue avec la fonction COMCréeInstance.
<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 COMAppelleMéthode 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 l'objet COM

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 l'objet COM (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 méthode d'objet COM ou récupérer une chaîne en retour de l'appel d'une méthode d'objet COM

  1. En paramètre d'entrée, utilisez le type chaîne. Par exemple :
    sChaîne est une chaîne
    COMAppelleMéthode(<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 :
      sChaîne est une chaîne sur 100
      COMAppelleMéthode(<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
      COMAppelleMéthode(<Objet>, <Numéro de la méthode>, &nAdresseChaîne)
      sChaîne est une chaîne
      sChaîne = 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 = COMAppelleMéthode(<Objet>, <Numéro de la méthode>)
    sChaîne est une chaîne
    sChaîne = ChaîneRécupère(nAdresseChaîne, crAdresseASCIIZ)
    // dans Méthode en C : Return PointeurEnC

Passer une structure contenant une chaîne à une méthode d'objet COM

  1. En entrée, le code à utiliser est le suivant :
    Struct est une structure
    sChaîne est une chaîne
    FIN
    UneStruct est une Struct
    COMAppelleMéthode(<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 :
      sChaîne est une chaîne sur 100
      Struct est une structure
      aChaine est un entier
      FIN
      UneStruct est une Struct
      UneStruct:aChaine = &sChaîne
      COMAppelleMéthode(<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 :
      sChaîne est une chaîne
      Struct est une structure
      aChaine est un entier
      FIN
      UneStruct est une Struct
      COMAppelleMéthode(<Objet>, <Numéro de la méthode>, &UneStruct)
      sChaîne = 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 l'objet COM.
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 l'objet COM.
  • 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 :
COMAppelleMéthode(<Objet>, <Numéro de la méthode>, &<Nom de la procédure CallBack>)
Etats et RequêtesWindows

Divers

  • La fonction COMAppelleMéthode ne bloque pas les autres threads.
  • Si la méthode 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 : wd290vm.dll
Version minimum requise
  • Version 15
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 19/12/2023

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