Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3366 connectés 

 


Dernière réponse
Sujet : [VC++] Besoin d'un expert en DLL/mémoire partagé/allocation mémoire
leander bon finalement si je fais
"__int64*   pi64Frequency= new __int64;  
 
if (QueryPerformanceFrequency((LARGE_INTEGER*)pi64Frequency))  
{  
 m_i64Frequency = i64Frequency;  
 return true;  
}  
return false;"
 
ça marche contrairement à ce que je pouvais penser. Donc c'est vraiment bizarre ce bug.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
leander bon finalement si je fais
"__int64*   pi64Frequency= new __int64;  
 
if (QueryPerformanceFrequency((LARGE_INTEGER*)pi64Frequency))  
{  
 m_i64Frequency = i64Frequency;  
 return true;  
}  
return false;"
 
ça marche contrairement à ce que je pouvais penser. Donc c'est vraiment bizarre ce bug.
leander j'ai penser aussi à ça, j'ai donc essayé de l'initialiser, mais ce n'est pas ça.
 
Je vais faire un test en faisant un new de mon i64Frequency avant d'appeler la fonction pour vérifier que ça plante que quand la variable se trouve dans une autre zone mémoire.
BENB ET ca ne viendrais pas de la valeur de i64Frequency ?
 
car dans le premier il est initialise par le constructeur et dans les autres il ne l'est pas

 

[jfdsdjhfuetppo]--Message édité par BENB--[/jfdsdjhfuetppo]

leander J'ai un problème assez bizarre et que je n'arrive pas à expliquer.
Attention c'est un peu compliqué.
 
Donc, j'ai un programme qui charge 2 Dlls. Une Dll 1 qui contient un gestionnaire de mémoire et par lequel passe tout les new (allocation mémoire) que je fais dans mon Exe et mes Dlls.
Et l'autre Dll 2 contient que truc dont une classe de Temps CTime qui utilise le QueryPerformanceFrequency() de windows.
 
Donc, mon problème est le suivant :
depuis mon Exe j'appelle un fonction de ma Dll 2 qui va faire un  
"CTime*   pTime:
 
pTime = new CTime;
pTime->Init()".
 
Le new est bien sur pris en charge par le la Dll 1.
Dans la fonction Init(), j'ai le code suivant :
"if (QueryPerformanceFrequency((LARGE_INTEGER*)&m_i64Frequency))
{
  return true;
}
return false;"
 
ou m_i64Frequency est une variable membre de ma classe CTime.
Donc le problème est à ce niveau là. En effet la fonction QueryPerformanceCounter me renvoie false !!
 
J'ai donc fais des tests, et si je met le code :
"
__int64   i64Frequency;
 
if (QueryPerformanceFrequency((LARGE_INTEGER*)&i64Frequency))
{
  m_i64Frequency = i64Frequency;
  return true;
}
return false;"
 
ça marche !!! L'appel à la fonction QueryPerformanceFrequency marche.
J'ai donc aussi essayer un autre test. Si pour la création de ma Classe CTime je fais :
"CTime        rTime;
 
rTime.Init();"
 
ou  
 
"CTime*       pTime;
 
pTime = (CTime*) malloc( sizeof(CTime) );
pTime->Init();"
 
ça marche niquel !!!!
Conclusion, apparemment la fonction QueryPerformanceFrequency() n'accepte pas les variables qui sont allouées dans une autre Dll, mais elle accepte les variables qui se trouve dans le Heap.
 
 
Pourtant mon Exe et mes Dlls sont tous compilés avec les options MultiThread Dll et Alignement sur 4 bytes.
 
Donc, es-ce que quelqu'un à une petite idée ?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)