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 ?