2009-04-03 6 views
2

Excel 2003 파일에서 데이터를 자동으로 읽어야하는 백그라운드 서비스 응용 프로그램을 작성 중입니다. 하지만 내가 뭘하려고해도 OlePropertyGet() 메서드는 주소 "00000800"에서 읽으려고 할 때 항상 EAccessViolation 오류를 발생시킵니다.C++, OLE, Excel 자동화 : EAccessviolation at 00000800

오류는 항상이 코드의 마지막 줄에서 발생하고 방법은 수신 매개 변수에 어떤 독립적 인 것 같다 나는이에 대한 몇 가지 광범위한 구글에서 검색을 수행 한

Variant excel, workbooks; 

try 
{ 
    excel = GetActiveOleObject("Excel.Application"); 
} 
catch(...) 
{ 
    excel = CreateOleObject("Excel.Application"); 
} 

workbooks = excel.OlePropertyGet("Workbooks"); 

하지만도의 아무것도 발견 원격으로 도움을 주겠지 만 this forum thread 누군가가 같은 문제를 가지고 있지만 그 원인이나 해결책에 대한 정보를 제공하지 않는다. (어느 시점에서 저자는 원인을 알고 있지만 그것이 무엇인지 말하지 않는다는 것은 다소 재미있다. !).

이 문제의 원인과 해결 방법에 대한 아이디어는 물론 Excel OLE 자동화에 대한 대안도 있습니다.

+0

이 너무 좋아 보이지 않습니다. – ALOToverflow

답변

2

내 생각은 널 포인터 문제 .. 그것은 GetActiveOleObject()CreateOleObject()가 일하지 둘과 같습니다

입니다.

OlePropertyGet을 호출하기 전에 '엑셀'의 유효성을 확인하십시오.

그리고 Excel을 설치했는지 확인해야합니다.

0

코드가 "Excel.Application"을 성공적으로 해결하지 못하여 null 포인터가 될 수 있습니다. 이 문자열로 레지스트리 조회를 사용하여 Excel을 식별합니다. 그 레지스트리 항목이 누락 된 것 같습니다.

0

나는 (C++ Builder에서) 만든 개체의 유효성을 확인하는 등의 코드를 사용하여 응용 프로그램이 0x800과 같습니다 주소로 읽으려고하는 경우

Varaint excel = GetActiveOleObject("Excel.Application"); 
TAutoDriver<IDispatch> dispatcher; 
dispatcher.Bind(excel, false); 

if (dispatcher.IsBound()) 
{ 
    Variant workbooks = excel.OlePropertyGet("Workbooks"); 
} 
관련 문제