ctypesの中MSVCRTの異なるバージョン
質問
Windowsでは、私はctypesのモジュールをインポートするときctypes.cdll.msvcrt
オブジェクトが自動的に存在し、それがmsvcrt
のMicrosoft C ++ランタイムライブラリ<のhref = "http://docs.python.org/library/ctypes.html#loading-を表しダイナミックリンクライブラリ」REL = "noreferrer">ドキュメントに記載する。
しかし、私は 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
負荷は、Windowsの一部としてその船のライブラリである、msvcrt.dll
。あなたはmsvcrt
から無料malloc関数を/呼び出すべきではありませんので、それは、とPythonのリンクCランタイムではありません。
たとえば、Pythonの2.6 / 3.1のために、あなたはctypes.cdll.msvcr90
を使用する必要があります。これは時間の経過とともに変化するように、find_msvcrt()
は、あなたが本当に(ctypes.CDLL
を介して負荷当時と)を使用する必要があり、ライブラリの名前を与えます。
ここでは、MSC、VC ++、プラットフォームSDK、またはWindowsの一部として様々なポイントでリリースされたMicrosoft CRTのいくつかの異なるバージョンの名前である:CRTDLL.DLL、MSVCRT.DLL、msvcrt4.dll、MSVCR70.DLL 、msvcr71.dllを、MSVCR80.DLL、msvcr90.dllます。