Pergunta

No Windows, o ctypes.cdll.msvcrt o objeto existe automaticamente quando eu importo o módulo ctypes e representa o msvcrt Microsoft C ++ Runtime Library De acordo com os documentos.

No entanto, noto que também há um find_msvcrt função que será "return the filename of the VC runtype library used by Python".

Ainda afirma, "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."

Então, minha pergunta é: qual é a diferença entre o ctypes.cdll.msvcrt biblioteca que eu já tenho e a que posso carregar com o find_msvcrt função? Em que circunstâncias específicas elas não podem ser a mesma biblioteca?

Foi útil?

Solução

Não é só isso ctypes.cdll.msvcrt existe automaticamente, mas ctypes.cdll.anything existe automaticamente e é carregado no primeiro acesso, carregando anything.dll. Então ctypes.cdll.msvcrt Cargas msvcrt.dll, que é uma biblioteca que é fornecida como parte do Windows. Não é o tempo de execução do C com o qual o Python se link, então você não deve ligar para o malloc/livre de msvcrt.

Por exemplo, para Python 2.6/3.1, você deve usar ctypes.cdll.msvcr90. Como isso mudará com o tempo, find_msvcrt() fornece o nome da biblioteca que você realmente deve usar (e depois carregar ctypes.CDLL).

Aqui estão os nomes de algumas versões diferentes do Microsoft CRT, lançadas em vários pontos como parte do MSC, VC ++, The Platform SDK ou Windows: Crtdll.dll, MSVCRT.DLL, MSVCRT4.DLL, MSVCR70.DLL, MSVCRRCR71. dll, msvcr80.dll, msvcr90.dll.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top