Question

Dans Windows, l'objet ctypes.cdll.msvcrt existe automatiquement quand j'importer le module ctypes, et il représente la msvcrt de bibliothèque d'exécution Microsoft C ++ d'après les documents .

Cependant, je remarque qu'il ya aussi un find_msvcrt fonction qui "return the filename of the VC runtype library used by Python".

Il indique en outre, "If you need to free memory, for example, allocated by an extension module with a call to the free(void *), it is important that you use the function in the same library that allocated the memory."

Alors, ma question est, quelle est la différence entre la bibliothèque ctypes.cdll.msvcrt que je l'ai déjà et celui que je peux charger avec la fonction find_msvcrt? Dans quelles circonstances particulières pourraient-ils pas la même bibliothèque?

Était-ce utile?

La solution

Il ne suffit pas que ctypes.cdll.msvcrt existe automatiquement, mais ctypes.cdll.anything existe automatiquement, et est chargé lors du premier accès, le chargement anything.dll. Ainsi, les charges ctypes.cdll.msvcrt msvcrt.dll, qui est une bibliothèque que les navires dans le cadre de Windows. Il n'est pas le moteur d'exécution C que les liens avec Python, vous ne devriez pas appeler le malloc / sans msvcrt.

Par exemple, pour Python 2.6 / 3.1, vous devriez utiliser ctypes.cdll.msvcr90. Comme cela va changer au fil du temps, find_msvcrt() vous donne le nom de la bibliothèque que vous devriez vraiment utiliser (et chargement par ctypes.CDLL).

Voici les noms de quelques versions différentes du CRT Microsoft, publié à divers points dans le cadre du MSC, VC ++, le kit de développement de la plate-forme, ou Windows: crtdll.dll, msvcrt.dll, msvcrt4.dll, msvcr70.dll , msvcr71.dll, msvcr80.dll, msvcr90.dll.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top