2016-12-08 12 views
0

私はXLW libraryの助けを借りて、Microsoft Excel用の.XLLプラグインを書くのにC++を使用しています。私のオペレーティングシステムはWindows 7の64ビット版で、RAMは32 GBです。私のExcelはExcel 2010、32ビット版です。 GlobalMemoryStatusExで確認Excel XLLプラグインにはいくつのメモリがありますか?

、それは(ullAvailPhys)使用可能な物理メモリは約23ギガバイトであるがXLLのコードのみが、(struct _MEMORYSTATUSEXullAvailVirtualから)約1200メガバイトの仮想メモリが利用可能で見ることができることを示しています。

私のコードはかなりのメモリ(計算スレッドあたり約100MB)を必要とするため、12個のスレッドを発行した後、不正な割り当てエラーが発生します。

メモリを増やす方法はありますか?これは、Excel XLLプラグインの制限

  1. ですか?コンソールアプリケーションでは、GlobalMemoryStatusExは約2034 MBの仮想メモリを使用できると報告しています。
  2. これはXLW libraryの制限ですか?
  3. これは32-bit Excelの制限ですか?

答えて

1

XLLは実際には名前が変更されたDLLです。 32ビットのExcelを使用している場合、Excelのプロセス全体には32ビットの仮想アドレス空間があり(WindowsはOSの半分を占有します)。したがって、プロセス(XLLとExcelの両方)は合計2Gに制限されています。

選択肢は次のとおりです。

  1. 64ビットExcelに切り替え(あなたのXLLをする必要があることを意味し、64ビット)
  2. XLLは、32ビットのままましょう、そしてそれ打ち上げ作ります別々の(おそらく64ビットの)プロセスを作成し、それを処理します。

後者のオプションは明らかにはるかに複雑であり、プロセス間のデータのコピーは、そのてきぱきとされません - しかし、それオプションです。

+0

私の 'A.XLL'は依然として32ビットのDLLですが、別の(おそらく64ビットの)プロセス' B.exe'を実行し、 '32ビットExcel' - '32ビットA.XLL' - ' 64ビットB.exe'通信? – athos

+0

@athos:はい、そうです。 –

+0

もしそうならば、 'A.XLL'は' B.exe'と効率よく会話をすることができますか?スピードは私の心配です。 – athos

関連する問題