2009-11-10 10 views
3

J'appelle une DLL C à partir d'une application Delphi 2009 et je continue d'obtenir des erreurs lorsque la mémoire allouée par GetMem ou AllocMem est transmise à la DLL. La seule façon d'éviter ces erreurs était d'utiliser malloc de msvcrt.dll. Qu'est-ce que malloc fait que les routines de mémoire intégrées ne le sont pas, et comment puis-je faire fonctionner les fonctions intégrées? Je n'aime vraiment pas contourner le gestionnaire de mémoire intégré.Pourquoi mon programme arrête-t-il de se bloquer si j'appelle malloc au lieu de GetMem?

+1

Quel genre d'erreurs obtenez-vous? Il ne devrait pas y avoir de problèmes à moins que la DLL ne tente de libérer ou de réaffecter la mémoire que vous lui avez transmise, ce qu'elle ne devrait vraiment pas faire. –

+0

D'accord, mais malheureusement "ne devrait pas être" et "n'est pas" sont des choses différentes, et beaucoup trop souvent ainsi. – qid

+1

Merci pour la réponse. La DLL a une option pour prendre le contrôle de la mémoire et je l'utilisais. Je vais réécrire ma fonction pour garder le contrôle de la mémoire. –

Répondre

4

Si la DLL tente jamais de libérer cette mémoire ou de manipuler autrement l'allocation de mémoire (par exemple développer/contracter), cela l'expliquerait. Le mélange de systèmes d'allocation de mémoire n'est pas recommandé.

0

Faites attention à la convention d'appel, stdcall ou cdecl .