Code ne fonctionnant plus hors-thread, avec seulement des variables globales [Résolu]

Signaler
Messages postés
29
Date d'inscription
mardi 7 février 2006
Statut
Membre
Dernière intervention
3 janvier 2011
-
Messages postés
29
Date d'inscription
mardi 7 février 2006
Statut
Membre
Dernière intervention
3 janvier 2011
-
Bonsoir,

J'ai un code qui permet d'envoyer du texte dans une zone "input" d'un DirectUIHWND. En fait je lance un thread pour réaliser la recherche de la zone, jusque là tout va bien. Si je modifie le contenu de la zone dans le thread, cela fonctionne, mais si je le lance après, tout en ayant gardé les variables déclarées en globales, ça ne fonctionne plus.

Je fais donc:

//Variables globales:

VARIANT hFoundVar;
IAccessible* hFoundIacc=NULL;

//Donc je lance depuis mon main

CreateThread(NULL, 0, FindWindow, (LPVOID)hwnd, 0, NULL);

//Ce qui m'aboutit à:
{
CoInitialize(NULL);
VariantInit(&hFoundVar);
GetCursorPos(&pt);
 if(AccessibleObjectFromPoint(pt,&hFoundIacc,&hFoundVar)==S_OK)
      {
         VARIANT vChildSelf;
        VariantInit(&vChildSelf);
        vChildSelf.vt = VT_I4;
        vChildSelf.lVal = 0;  //CHILDID_SELF
//La je peux changer la valeur:   J'appelle ma fonction Changer();
       }
}

void changer()
{
LPCSTR szText="dd";
                BSTR bstrText;
                LPWSTR wszText;
                wszText = new WCHAR[strlen(szText)+1];
                swprintf(wszText,L"%S",szText);
                bstrText = SysAllocString(wszText);
                delete[] wszText;
                hFoundIacc->put_accValue(hFoundVar,bstrText);
}

Mais si je lance la meme fonction après la fin du thread, ça ne marche plus, pourtant la fonctions se sert des memes variables globales et leurs valeurs sont les memes pendant le thread et après(j'ai vérifié avec le debugger), et rien ne change dans l'application de destination! Je suis perdu!
Merci beaucoup de m'aider!

1 réponse

Messages postés
29
Date d'inscription
mardi 7 février 2006
Statut
Membre
Dernière intervention
3 janvier 2011

C'est bon ca marche, il fallait faire un release sur l'iaccessible. On ne peut apparemment pas le trimbaler de partout