質問

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ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top