IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Pb avec la fonction DuplicateHandle


Sujet :

C++

  1. #1
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    460
    D�tails du profil
    Informations personnelles :
    �ge : 39

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Par d�faut Pb avec la fonction DuplicateHandle
    Bonjour, j'ai un pb au niveau de la fonction de la fonction : DuplicateHandle sous pocket pc qui renvoie false et le getlasterror : param�tre incorrect alors que sous win32, aucun probl�me.

    Voici le code :



    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    cbDialogMemory = GlobalSize( hDialogMemory);
    CallerhFileMem = CreateFileMapping( (HANDLE)0xFFFFFFFF,
                                    NULL,
                                    PAGE_READWRITE,
                                    0L,
                                    cbDialogMemory,
                                    NULL);
    if ( CallerhFileMem == NULL)
        {
        return( G_ERRLOG);
        }
    /* allocation des handle de process */
     
     
     
     
    ServerhProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, ServerPID);
    if ( ServerhProcess == NULL)
        {
        CloseHandle( CallerhFileMem);
        return( G_ERRLOG);
        }
     
     
     
     
     
     
     
    CallerhProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, CallerPID);
    if ( CallerhProcess == NULL)
        {
        CloseHandle( CallerhFileMem);
        CloseHandle( ServerhProcess);
        return( G_ERRLOG);
        }
     
    /* creation du handle pour le serveur */
     
     
     
    if ( !DuplicateHandle( CallerhProcess,
                                CallerhFileMem,
                                ServerhProcess,
                                &ServerhFileMem,
                                0,
                                FALSE,
                                DUPLICATE_SAME_ACCESS) )
        {
    		TCHAR szBuffer[20];
    	DWORD error = GetLastError();
    	StringCbPrintf(szBuffer, sizeof(szBuffer), TEXT("Erreur n°%u"), error);
    	TCHAR szErreur[80];
    	FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0,
    	 szErreur, 80, NULL
    	 );
    	MessageBox(NULL, szErreur, szBuffer, MB_OK | MB_ICONERROR);
        CloseHandle( CallerhFileMem);
        CloseHandle( ServerhProcess);
        CloseHandle( CallerhProcess);
        return( G_ERRLOG);
        }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    HANDLE                          CallerhProcess;
    /* HWND                            CallerhWnd; */
    HANDLE                          CallerhFileMem;
    HWND                            ServerhWnd;
    DWORD                           ServerPID;
    HANDLE                          ServerhProcess;
    HANDLE                          ServerhFileMem;
    void FARPTR                     CallerpFileMem;
    void FARPTR                     pDialogMemory;
    DWORD                           cbDialogMemory;
    merci

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Eh bien, je ne vois rien qui me choque au niveau de DuplicateHandle(), mais il y a un truc qui me chiffone (heurusement sans gravit�) : Pourquoi ne passes-tu pas directement INVALID_HANDLE_VALUE � CreateFileMapping au lieu de cette valeur hard-cod�e de 0xFFFFFFFF cast�e ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    460
    D�tails du profil
    Informations personnelles :
    �ge : 39

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Par d�faut
    Cela revient-il au m�me ?
    H�l�s ca ne r�sout pas mon pb
    Sinon puis-je contourner le pb avec d'autres fonctions ?

  4. #4
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    460
    D�tails du profil
    Informations personnelles :
    �ge : 39

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Par d�faut
    alors M�dinoc je sais pourquoi ca foire :

    DuplicateHandle can be called by either the source process or the target process. It can also be invoked where the source and target process are the same.

    The duplicating process uses the GetCurrentProcess function to get a handle of itself. To get the other process handle, it may be necessary to use some form of interprocess communication (for example, named pipe or shared memory) to communicate the process identifier to the duplicating process. This identifier is then used in the OpenProcess function to open a handle.

    If the process that calls DuplicateHandle is not the target process, the duplicating process must use interprocess communication to pass the value of the duplicate handle to the target process.

    DuplicateHandle can only duplicate handles to the types of objects in the following table.

    Handle Description
    Event Returned by CreateEvent or OpenEvent.
    Mutex Returned by CreateMutex.
    Semaphore Returned by CreateSemaphore.
    moi j'utilise OpenProcess, comment contourner le pb ?

    merci

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu peux peut-�tre utiliser une m�moire partag�e nomm�e, mais alors, il faudra transmettre le nom au serveur (ou un nombre, genre le PID du client, et utiliser une fonction commune qui g�n�re le nom � partir du PID).

    H�las, je ne connais pas l'API des PocketPC, donc je ne sais m�me pas si c'est support�. Si �a se trouve, le DuplicateHandle() des PocketPC ne supporte pas DUPLICATE_SAME_ACCESS ou une c****rie du genre...


    Edit: Je n'avais pas vu ton post pr�c�dent, mais il y a cette ligne-l� qui m'alarme:
    DuplicateHandle can be called by either the source process or the target process.
    Ton code utilise OpenProcess() pour les deux: Cela veut dire que ta fonction est ex�cut�e par un process qui n'est ni le serveur ni le client ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    460
    D�tails du profil
    Informations personnelles :
    �ge : 39

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Par d�faut
    je suis sous le client.
    Apr�s le serveur recup�re le message.
    Pas bcp plus loin d'ailleurs.
    Mais je suis tr�s embett� avec le DuplicateHandle, si quelqu'un sait comment palier ce pb.

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Si tu es sur le client, essaie avec GetCurrentProcess() pour le client plut�t que OpenProcess()...

    Et ensuite, v�rifie avec des flags sp�cifi�s manuellement, des fois que ce soit DUPLICATE_SAME_ACCESS qui plante (Je n'ai toujours rien trouv� sur DuplicateHandle() sous Pocket PC...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre �clair�
    Inscrit en
    Janvier 2005
    Messages
    460
    D�tails du profil
    Informations personnelles :
    �ge : 39

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Par d�faut
    J'ai trouv� la solution ^^, je donnerai la solution plus tard.
    Merci M�dinoc pour ton d�vouement au passage

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me avec les fonctions
    Par jvachez dans le forum PostgreSQL
    R�ponses: 1
    Dernier message: 13/01/2004, 12h06
  2. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    R�ponses: 4
    Dernier message: 31/10/2003, 16h37
  3. [Postgresql]Probl�me avec les fonctions ...
    Par fet dans le forum Requ�tes
    R�ponses: 4
    Dernier message: 02/10/2003, 09h04
  4. R�ponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 28/11/2002, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo