Вопрос

В Windows, the ctypes.cdll.msvcrt объект автоматически существует, когда я импортирую модуль ctypes, и он представляет msvcrt Библиотека среды выполнения Microsoft C++ согласно документам.

Однако я замечаю, что существует также find_msvcrt найти функция, которая будет "return the filename of the VC runtype library used by Python".

Далее в нем говорится, "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."

Итак, мой вопрос в том, в чем разница между ctypes.cdll.msvcrt библиотека, которая у меня уже есть, и та, которую я могу загрузить с помощью find_msvcrt функция?При каких конкретных обстоятельствах они могут не быть одной и той же библиотекой?

Это было полезно?

Решение

Дело не только в этом ctypes.cdll.msvcrt автоматически существует, но ctypes.cdll.anything автоматически существует и загружается при первом доступе, загрузка anything.dll.Итак ctypes.cdll.msvcrt нагрузки msvcrt.dll, которая представляет собой библиотеку, которая поставляется как часть Windows.Python ссылается не на среду выполнения C, поэтому вам не следует вызывать malloc / free из msvcrt.

Например, для Python 2.6 /3.1 вы должны использовать ctypes.cdll.msvcr90.Поскольку это будет меняться со временем, find_msvcrt() дает вам имя библиотеки, которую вы действительно должны использовать (а затем загрузить через ctypes.CDLL).

Вот названия нескольких различных версий Microsoft CRT, выпущенных в разные моменты как часть MSC, VC ++, platform SDK или Windows:crtdll.dll , msvcrt.dll, msvcrt4.dll, msvcr70.dll, msvcr71.dll, msvcr80.dll, msvcr90.dll,,,,.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top