8

Windows では、ctypes.cdll.msvcrtctypes モジュールをインポートするとオブジェクトが自動的に存在し、docs に従ってmsvcrtMicrosoft 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関数でロードできるライブラリの違いは何ですか? どのような特定の状況下で、それらが同じライブラリではない可能性がありますか?

4

1 に答える 1

11

それはctypes.cdll.msvcrt自動的に存在するだけでなく、ctypes.cdll.anything自動的に存在し、最初のアクセスでロードされますanything.dll。つまり、Windowsの一部として出荷されるライブラリであるをctypes.cdll.msvcrtロードします。msvcrt.dllPythonがリンクするのはCランタイムではないため、からmalloc/freeを呼び出さないでくださいmsvcrt

たとえば、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。

于 2009-08-28T19:30:12.273 に答える