Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : File mapping [ Windows / System ] (deck_bsd)

jeudi 12 octobre 2006 à 19:44:16 | File mapping

deck_bsd

Membre Club
Bonsoir / Bonjour à tous,

Voila j'ai trouvé l'exelente source de BruNews concernant les instance unique de programme. Plutot que de recopier bêtement la fonction, je cherche à la comprendre, j'ai compris en gros le comment, mais pas ds les détails et cela ... je n'aime pas. Donc voice mes questions lol.

- Opens a named file mapping object. "file mapping object " késako ?

- Qu'est ce que le FileMapping ? j'ai vaguement compris sur la msdn, que ces fonction permettent de renvoyer un pointeur sur une zonne mémoire, mais que contient la zone mémoire, ça je ne l'ai pas très bien compris, les instructions ? , le contenut de l'exe ?

- hwnd = (HWND) *((DWORD*) pmem); , j'ai compris que hwnd pointe maintenant sur la zone mémoire crée par le mapping, mais cela sert à quoi ?

Voice la fonction entière pour celui qui aurait le courage de bien me l'expliquer (en gras, les ligne que je ne comprend pas bien)

int __stdcall IsMappedSysApp(char *szname)
{
  HANDLE hmap;
  LPVOID pmem;
  HWND hwnd;
  hmap = OpenFileMapping(FILE_MAP_READ, 0, szname);
  if(!hmap) return 0;
  pmem = MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0);
  if(!pmem) goto closeMap;
  hwnd = (HWND) *((DWORD*) pmem);
  UnmapViewOfFile(pmem);
  if(IsWindow(hwnd)) {
    hwnd = GetLastActivePopup(hwnd);
    if(IsIconic(hwnd)) ShowWindow(hwnd, SW_RESTORE);
    SetForegroundWindow(hwnd);
  }
closeMap: CloseHandle(hmap);
  return 1;
}

-

++
deck_bsd

[ [ Lien ]]

vendredi 13 octobre 2006 à 02:03:18 | Re : File mapping

BruNews

Administrateur CodeS-SourceS
FileMapping, tu peux considérer cela comme un "flux" nommé dont la la source sera un fichier précis ou alors le fichier d'échange du système si tu ne précises pas de fichier.

OpenFileMapping: retourne un handle sur un objet noyau nommé, même principe qu'un mutex par exemple. Retournera 0 si nom n'est pas dans la table de handles ou accès refusé.

MapViewOfFile: mape une vue des données dans l'espace mémoire de l'appelant, si réussite retournera pointeur sur cette adresse mémoire.

hwnd = (HWND) *((DWORD*) pmem);
Là ce n'est (hormis le type Win HWND) que du simple C, on lit 4 octets depuis l'adresse pmem.
En plus verbeux, on écrirait:
DWORD *pdw;
DWORD v;
pdw = (DWORD*) pmem; // Un pointeur DWORD à l'adresse pmem
v = *pdw;

ciao...
BruNews, MVP VC++

samedi 14 octobre 2006 à 15:31:58 | Re : File mapping

deck_bsd

Membre Club
Si j'ai bien compris ;)

Ici vu que l'on ne spécifie pas un nom de fichier , mais le nom de l'application, il va allez voir ds la table des handle apres celui de l'application et va retourner un l'handle de l'application c'est ça ?

Et puis OpenFileMapping va renvoié un poiteur sur la zone mémoire du handle c'est bien cela?


++
deck_bsd

[ [ Lien ]]

samedi 14 octobre 2006 à 15:45:20 | Re : File mapping

BruNews

Administrateur CodeS-SourceS
OpenFileMapping retournera non pa un "handle de l'application" mais un handle sur un FileMapping s'il y en a un nommé existant avec ce nom.
C'est MapViewOfFile qui donne pointeur sur zone mémoire, normal puisque c'est elle qui charge en page RAM.

ciao...
BruNews, MVP VC++

samedi 14 octobre 2006 à 16:03:50 | Re : File mapping

deck_bsd

Membre Club
heu oui MapViewOfFile :s je sais pas pk j'ai dit OpenFileMapping :s ok , j'ai compris l'astuce :D ici on vérifie juste si il y a déjà un FileMapping avec le nom de l'application. Je voi ici a quoi il sert mais sinon le FileMapping, c'est quoi sont intéret ?

++
deck_bsd

[ [ Lien ]]

vendredi 19 septembre 2008 à 10:59:40 | Re : File mapping

magic_Nono

Membre Club
J'avais également repris cette fonction il y a quelques années,
et l'avais fait un poil évoluer.
les commentaires détaillés sont complétés en fonction de ce qui a été dit plus haut...

si ça peut être utile à quelqu'un


    bool __stdcall BUniq::exist(    
#ifdef WINCE
        LPCTSTR //WINCE fonctionne en unicode...
#else
        const char *
#endif
        szname , HWND * pHwnd )
    {
/// ------------------------------------------------------------------------------------------
/// ---------------- BXXX::BUniq::exist(LPCTSTR szname ,HWND* pHwnd) -> bool  ----------------
/// ------------------------------------------------------------------------------------------
/// -----  Objectif    : vérifier si une fenetre de ce nom n'est pas déjà instancié.
/// -----  explic    : ie déjà enregistré & tjs lancé
/// -----  Auteur(s)    : BruNews 07/08/04 - MagicNono 27/10/05
/// -----  PreCond    : /
/// -----  PostCond    : si le prog était déjà instancié, il est ramené au premier plan
/// -----  Etat        : 1            (-1<0<1<2)
/// -----  Nota        : nom originel : IsMappedSysApp
/// -----  MaJ 27/10/05 : réécriture en supprimant le goto - BCE
/// -----  MaJ 03/12/05 : retour du handle, optionnellement - BCE
/// ------------------------------------------------------------------------------------------
/// -----  LPCTSTR szname    : nom unique de l'appli ou MagicNumber associé (GUID)
/// -----  HWND* pHwnd    : optionnel : Handle de l'appli, en retour.
/// ------------------------------------------------------------------------------------------
/// -----  retour (bool )    : ok, exec autorisée
/// ------------------------------------------------------------------------------------------
        HANDLE hmap = OpenFileMapping( FILE_MAP_READ , 0 , szname );
        //    retourne un handle sur un objet noyau nommé, (handle sur un FileMapping, pas sur appli)
        //+    même principe qu'un mutex par exemple.
        //+    Retournera 0 si nom n'est pas dans la table de handles ou accès refusé.

        if( !hmap )
            return false;
        LPVOID pmem = MapViewOfFile( hmap , FILE_MAP_READ , 0 , 0 , 0 );    //mape une vue des données dans l'espace mémoire de l'appelant,
        //+    si réussite retournera pointeur sur cette adresse mémoire
        //+ en l'occurence, ptr sur RAM chargée, par la filemapping
        if( pmem )
        {
            HWND hwnd = ( HWND ) * ( ( DWORD * ) pmem );// lit 4 octets depuis l'adresse pmem.
            UnmapViewOfFile( pmem );
            if( IsWindow( hwnd ) )
            {
                hwnd = GetLastActivePopup( hwnd );
                if( IsIconic( hwnd ) )
                    ShowWindow( hwnd , SW_RESTORE );
                ShowWindow( hwnd , SW_SHOW );    //gestion du cas: caché ds la systray
                SetForegroundWindow( hwnd );
                if( pHwnd )
                    *pHwnd = hwnd;
#ifdef SON_OK
                sndPlaySound( "Maximize" , SND_NODEFAULT );
#endif /* SON_OK */

            }
        }
        CloseHandle( hmap );
        return true;
    }


Nota au passage, pour WINCE,
OpenFileMapping
n'était pas défini et ai dut le réimplémenter.


___________________________________________________________
Magicalement
Nono



Cette discussion est classé dans : file, hwnd, mapping, pmem, hmap


Répondre à ce message

Sujets en rapport avec ce message

File Mapping entre deux processus [ par vinvay ] Voilà, mon problème est que j'ai deux processus, un qui écrit dans la mémoire partagée et l'autre qui lit, et je voudrai que lorsque le processus qui Problème avec GetOpenFileName() [ par max12 ] Salut,J'ai un problème avec la fonction GetOpenFileName()BOOL CALLBACK ExplorerDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){    HWND Edit control et mouse over [ par youpiyoyo ] je cherche a recuperer une chaine de caractères (ou un mot) dans une edit control ou rich edit peut importe lorsque je passe la souris dessus...j'ai d cherche explication d'un code [ par jopiou ] Bonsoir voila je cherche quelqu'un pouvant m'expliquer ce code HBITMAP hbmp; int cxDib, cyDib,idximg; char *szimages = {"Chat.jpg"}; void __stdcall Help for change a program in C++ for AVI file [ par mr_log ] please how to change this program for read all size for AVI file? Ce programme permet d'aficher un fichier AVI bien précis width= 48 and lenght=80, so Savoir quand on clique sur un bouton [ par cyberlewis ] Slt à tous, Voilà j'ai un code que j'ai fait, et normalement si on cliques sur les boutons, ça lance la fonction Encode() ou Decode() en fonction du b prob avec nom de fichier. [ par kach23 ] bonjour, je debute etje réalise une acquisition de mesure avec builder.je souhaite que le nom du fichier ouvert a chaque acquisition soit different.vo GROS problème avec ' tellg() ' [ par Sanke ] Bonjour à tous, je poste ce message parce que je ne comprends pas ce qui se passe avec tellg() :je m'explique, je lis un fichier ligne à ligne dont vo Problème d'initailisation objet IDirect3DDevice9 [ par olivierpot2 ] Bonjour à tous,je débutes en c++ directx et j'avoue que j'ai un peu (beaucoup) de mal...Dans le code suivant je n'arrives pas à initilalisé la variabl


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,733 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.