|
아래는 엑셀(Excel)로 데이터를 저장하는 루틴입니다.
그런데 아래의 소스만 작성하여 컴파일하면 깨끗하게 잘 동작을 합니다.
// Excel's Application Object
Variant xlApp = Variant::CreateObject("Excel.Application"); <----------#########
xlApp.OlePropertySet("DisplayAlerts", false);
xlApp.OlePropertySet("Visible", false);
// 엑셀의 워크북 오브젝트 접근
Variant xlBooks = xlApp.OlePropertyGet("Workbooks");
//파일을 새로 만들때
//xlBooks.OleProcedure("Add");
// 존재하는 엑셀 파일을 연다.
xlBooks.OleProcedure("Open", OleVariant(strNewXlsFile));
// 어플리케이션 내에서 첫번째 워크북을 얻는다.
Variant xlBook = xlBooks.OlePropertyGet("Item", 1);
// 워크시트들을 관리할 수 있는 오브젝트를 얻는다.
Variant xlSheets = xlBook.OlePropertyGet("Worksheets");
// 첫번째 워크시트를 얻는다.
Variant xlSheet = xlSheets.OlePropertyGet("Item", 1);
xlSheet.OlePropertySet("Cells", 40, 11, 1000);
xlBook.OleProcedure("Save");
xlBooks.OleProcedure("Close");
xlApp.OleProcedure("Quit");
xlSheet = Unassigned;
xlSheets = Unassigned;
xlBook = Unassigned;
xlBooks = Unassigned;
xlApp = Unassigned;
그런데 제가 특정 ocx 파일을 임포트해서 생성된 컴퍼넌트만 붙이면, NotifyNonDelphiException 에러가 발생합니다. 특정 컴퍼넌트도 개별적으로 사용할때는 아무런 에러가 없었고, 또 같이 붙여도 이 컴퍼넌트는 잘 동작합니다. 이 컴퍼넌트를 프로젝트에 추가하면
#include "CWxxxLib_OCX.h" <-- head file
#include <OleCtrls.hpp> <-- head file
#pragma link "CWxxxLib_OCX" <-- cpp file
이넘들이 자동적으로 추가가 되는데요...
그러고 나면 위의 엑셀관련 루틴에서 화살표( <--## ) 이후부분에서 무조건 Access violation 에러가 발생하네요.. 화살표 부분의 소스는 실행이 되고, 다음 라인부터 한라인씩 주석처리를 해도 무조건 에러가 발생합니다.
그리곤 항상 system.pas의 다음의 라인으로 갑니다..
{ tell the debugger about the raise of a non-Delphi exception }
{$IFNDEF LINUX}
procedure NotifyNonDelphiException;
asm
CMP BYTE PTR DebugHook,0
JE @@1
PUSH EAX
PUSH EAX
PUSH EDX
PUSH ESP
PUSH 2
PUSH cContinuable
PUSH cNonDelphiException
CALL RaiseExceptionProc
ADD ESP,8 <------------##########
POP EAX
@@1:
end;
{$ENDIF}
그래서 별도의 폼으로 만들어서 헤더파일과 소스파일을 분리를 했는데도 여전히 동일한 에러가 발생합니다... 둘다 포기할 수 없는 부분이라(ㅠ.ㅠ) 해결책을 찾아야 되는데, 너무 어렵네요..
해결책이나 저 에러를 피해갈 수 있는 방법을 아시는분의 답변을 부탁드리겠습니다. (__)
|