PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Exemple WD DnD Outlook en 64 bits
Exemple WD DnD Outlook en 64 bits
Started by Didier, May, 07 2024 4:23 PM - 1 reply
Posted on May, 07 2024 - 4:23 PM
J'aimerai intégré cet exemple à mon application 64 bits. Malheureusement ça plante avec l'erreur suivante :
Vous avez appelé la fonction 'COMAppelleMéthode'.
La méthode 3 a provoqué une erreur d'exécution. L'objet manipulé, l'adresse de l'objet ou le numéro de la méthode ne sont pas valides.

Pile des appels :
Procédure globale Drop (COL_DnD_Outlook.Drop), ligne 26

Date : 07/05/2024 15:39:58
Projet : WD DnD Outlook

Informations supplémentaires :
Code erreur : 2807
Module : wd290vm64.dll (01A290076p - 29.0.462.7)

Informations de débogage :
Module : RPCRT4.dll
Adresse de base : 00007FFEB78B0000
Erreur systeme : Access violation (GPF)
RIP = 00007FFEB790A47C
OS : Windows 8 x64 (6.2.9200)

Je ne comprend pas ce que vient faire RPCRT4.dll là-dedans.

Le code de la procédure Drop :

// Résumé : Procédure appelée lors du lâcher du Drag&Drop
PROCÉDURE Drop(n_this_ est un entier système <utile>, nAdresse est un entier système, nKeyState est un entier <utile>, x est un entier <utile>, y est un entier <utile>, dwEffect est un entier système <utile>)

// Variables locales
IDataObject est un COMObjet
medium est un STMEDIUM
formatetc est un STFORMATETC

// Récupération du IDataObject
IDataObject..Adresse = nAdresse

// Configuration du format voulu
// Ici on veut "FileContents" (on appelle l'API RegisterClipboardFormat pour récupérer le "numéro" du format "FileContents").
// Si ce format a déjà été crée par Outlook, l'API nous renvoie son numéro; sinon, elle le crée
formatetc.cfFormat = API("user32", "RegisterClipboardFormatA", "FileContents")
formatetc.dwAspect = 1
formatetc.lindex = 0
formatetc.ptd = Null
formatetc.tymed = 12+ 1

// Mise à zéro de la structure email
EmailRAZ()

// Récupération de la donnée voulue
SI COMAppelleMéthode(IDataObject, 3, &formatetc, &medium) = 0 ALORS
SI medium.unionMember <> Null ALORS
// Récupération du pointeur vers la donnée
nAdresseIStorage est un entier système = medium.unionMember
// Chargement de l'e-mail
ChargeStorage(nAdresseIStorage)
// Appel de la méthode callback
QUAND EXCEPTION DANS
gCallback()
FAIRE
// Ne rien faire
FIN
FIN
SINON
Erreur("Ceci n'est pas un e-mail Outlook valide.")
FIN

RENVOYER 0
Posted on July, 17 2024 - 9:51 AM
Bonjour,

J'ai essayé sur mon PC l'exemple WD DnD Outlook qui fonctionne très bien.
J'ai donc essayé d'intégrer cette partie très intéressante dans un de mes projets.
Je n'ai pas ce type d'erreur que tu évoques, par contre, dans la fenêtre qui permet de recevoir le mail Outlook, dans la procédure "OutlookDndActive" sur ces lignes de code :

// On enregistre la cible DnD
SI API("ole32", "OleInitialize", Null) = 0 _ET_ API("ole32", "RegisterDragDrop", Handle(Champ), &gIDropTarget) = 0 ALORS
RENVOYER Vrai
SINON
RENVOYER Faux
FIN

Il me renvoie systématiquement FAUX

J'ai essayé de comprendre mais impossible à faire marcher cette procédure.

As tu une idée ?