2010-09-15 5 views
0

Je voulais en savoir plus sur le mélange des temps d'exécution entre les exe et les dll. Sur une machine WinXP, j'ai créé une DLL construite avec le runtime de lancement (/ MD) et un exe qui appelle une fonction dans la DLL qui est construite debug (/ MDd). La fonction dans la DLL alloue de la mémoire au tas et l'exe le supprime. Je m'attendais à ce que cela tombe en panne, cependant, il se bloque à la place. En utilisant ProcessExplorer je vois que l'état de l'exécutable est "wait: userrequest". Le même exercice sur une machine Vista montre le dialogue. Je veux voir le dialogue sur ma machine XP aussi!Pourquoi la boîte de dialogue "Erreur d'application" n'apparaît-elle pas?

J'ai essayé le contraire de toutes les suggestions here. Je suis allé googled autour depuis un certain temps maintenant. J'ai joué avec l'activation de tous les services de rapport d'erreurs que j'ai pu trouver dans gpedit.msc et vérifié que le service de rapport d'erreurs est en cours d'exécution dans la boîte de dialogue AdministrativeTools-> Services.

Pour être explicite, voici mon dll:

int* getDllMem(){ 
    printf("dll alloc mem"); 
    int *ptr = new int; 
    return ptr; 
} 

Voici mon exe:

int main() 
{ 
    printf("main\n"); 
    int *ptr = getDllMem(); 
    printf("main delete\n"); 
    delete ptr; 
    printf("main exit\n"); 
    return 0; 
} 

Répondre

2

Votre programme est passé à un comportement non défini et erroné. Pourquoi attendre exactement le même résultat sur différents systèmes d'exploitation?

Si quelque chose de légèrement différent se produit au cours de l'exécution sur chacune de ces machines, il est possible que le résultat soit que l'un se bloque tandis que l'autre se bloque immédiatement. Les temps d'exécution que le programme utilise sont peut-être légèrement différents entre ces machines/systèmes d'exploitation. Peut-être que d'autres aspects du système d'exploitation ont un effet (par exemple, address space layout randomization).

Je suppose que seule une personne connaissant très bien le gestionnaire d'exécution et le gestionnaire de segments de mémoire pourrait répondre exactement à la question de savoir s'il y a une différence. Honnêtement, ma réaction instinctive à la question est: Vous ne devriez pas passer trop de temps à vous demander pourquoi la défaillance du programme est différente entre ces deux systèmes d'exploitation, car vous ne devriez jamais écrire un programme comme celui-ci en premier lieu.

0

XP et Vista ont une architecture de système différent, et peut-être différent du code assembleur. Sur quelle machine avez-vous compilé le programme? XP ou Vista?

+0

Le programme est compilé sur XP seulement. Lorsque copié sur Vista, je vois une boîte de dialogue avec une erreur. – JamesG

+0

Peut-être une solution rapide pourrait être d'utiliser des instructions try/catch, et gérer les erreurs gracieusement. – alexy13

Questions connexes