2012-07-25 22 views
15

32ビットPythonで32ビットDLLを呼び出すためにCDLLを使うとうまくいきます。 しかし、私の64bit win7 osのunfortunatellyは、64bit pythonだけをインストールします。それは、それを呼び出すときに効果的なwin32アプリではありません!64ビットPythonで32ビットdllまたはexeを使用できますか?

64ビットPythonで32ビットdllまたはexeを使用できますか?それとも32ビットのPythonをインストールする必要がありますか?

+1

マシンに32ビットPythonをインストールするには問題ありません。 –

+0

これは、http://stackoverflow.com/questions/5720884/load-32-bit-shared-library-from-64-bit-application – cdiggins

答えて

25

64ビットEXEは32ビットDLLをロードできません。 (そしてその逆:32ビットEXEは64ビットDLLをロードすることができません)結局のところ、ポインタのサイズには同意できません.EXEが4GB境界を超えてメモリを割り当てて、 32ビットDLLへのポインタ?

のいずれかにあなたが持っているでしょう:

  1. はあなたのDLLの64ビットバージョンを確認します。
  2. 32ビットバージョンのPythonを使用してください。または
  3. 別の(32ビット)EXEでDLLをホストし、64ビットのPythonプロセスから何らかの形式のプロセス間通信を使用して対話します。
+0

の一般的な質問の特定のケースです。したがって、64ビットバージョンのPythonでは32ビットモードで実行することを選択しますか?ちょうど64ビットwin7は32ビットアプリケーションを実行することができます – hjhnju

+5

64ビットWindowsは32ビットプロセスを実行できますが、個々のプロセスは64ビットまたは32ビットのいずれかでなければなりません。 1つのアドレス空間内で2つを混在させることはできません。アプリケーションを32ビットとして実行するには、32ビットアプリケーションとしてコンパイルする必要があります。 (これらのポインタの大きさ。再び、ポインタのサイズが64ビットであると予想されるようにアプリケーションがコンパイルされている場合は、32ビットのポインタでは機能しません。逆も同様です)。32ビットとしてコンパイルされた場合、 32ビットアプリケーションとして。 64ビットとしてコンパイルされた場合、64ビットアプリケーションとして実行されます(64ビットOSでは32ビットOSではまったく動作しません)。 –