begin process at 2012 02 12 01:04:32
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

File mapping


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

File mapping

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ée 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 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 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 File Mapping [ par aymen87 ] Bonjour Je veux partager une ressource entre deux processus, j'ai eu recours au file mapping. Dans ma machine,ca fonctionne à merveille mais quand j 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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales