2016-12-08 9 views
0

저는 C++을 사용하여 XLW library의 도움으로 Microsoft Excel 용 .XLL 플러그인을 작성하고 있습니다. 내 운영 체제는 Windows 7 64 비트 버전이며 32GB RAM입니다. 하지만 내 Excel은 Excel 2010, 32 비트 버전입니다.Excel XLL 플러그인의 메모리 용량은 얼마나됩니까?

GlobalMemoryStatusEx으로 확인, 그것은 XLL의 코드 만 볼 수 있음을 보여준다 (ullAvailVirtual에서 struct _MEMORYSTATUSEX)에 사용할 수에 대한 1천2백메가바이트 가상 메모리, 사용 가능한 물리적 메모리 (ullAvailPhys)이 약 23 2GB입니다 불구하고가.

내 코드는 12 개의 스레드를 발행 한 후 상당히 많은 메모리 (계산 스레드 당 약 100MB)가 필요하므로 잘못된 할당 오류가 발생합니다.

사용할 수있는 메모리를 늘릴 방법이 있습니까?

  1. 이것은 Excel XLL 플러그인의 제한 사항입니까? 콘솔 응용 프로그램에서 GlobalMemoryStatusEx은 약 2034MB의 가상 메모리를 사용할 수 있다고보고합니다.
  2. XLW library의 제한 사항입니까?
  3. 32-bit Excel의 제한 사항입니까?

답변

1

실제로 XLL은 이름이 바뀐 DLL입니다. 32 비트 Excel을 사용하는 경우 전체 Excel 프로세스에는 32 비트 가상 주소 공간이 있으며 Windows는 운영 체제의 절반을 예약합니다. 따라서 귀하의 프로세스 (XLL과 Excel 자체)는 총 2G로 제한됩니다.

귀하의 선택 사항은 다음과 같습니다

  1. 64 비트 엑셀로 전환합니다 (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