으.. 하다보니 이런것까지 손대는구나!!! ㅋㅋ
강좌 url
http://support.microsoft.com/default.aspx?scid=kb;ko;823982
관련 컴포넌트 다운로드 url
http://www.microsoft.com/downloads/details.aspx?FamilyID=7287252c-402e-4f72-97a5-e0fd290d4b76&displaylang=ko
-----------------------------------------------------------------------------------
이 문서에서는 Microsoft Office 2003 Web Components의 클래스 래퍼를 수정하는 방법을 단계별로 설명합니다. 그런 다음 Microsoft Visual Studio .NET을 사용하여 만드는 응용 프로그램에서 클래스 래퍼의 이벤트를 관리할 수 있도록 클래스 래퍼를 다시 생성하는 방법을 설명합니다.
기본적으로 Microsoft Visual Studio .NET이 생성하는 클래스 래퍼는 다음 Office 2003 Web Components의 이벤트를 처리하도록 허용하지 않습니다.
이 문서에서는 Microsoft Office 2003 Web Components의 클래스 래퍼를 수정하는 방법을 단계별로 설명합니다. 그런 다음 Microsoft Visual Studio .NET을 사용하여 만드는 응용 프로그램에서 클래스 래퍼의 이벤트를 관리할 수 있도록 클래스 래퍼를 다시 생성하는 방법을 설명합니다.
기본적으로 Microsoft Visual Studio .NET이 생성하는 클래스 래퍼는 다음 Office 2003 Web Components의 이벤트를 처리하도록 허용하지 않습니다.
- 차트
- 스프레드시트
- 피벗 테이블
배경
이 문제를 해결하려면 ClassInterfaceType.None 값을 사용하여 COM interop가 클래스 대신 인터페이스의 IDispatch를 반환하도록 생성된 클래스를 표시할 수 있습니다. IDispatch 인터페이스에는 이벤트의 DISPID가 포함됩니다.
클래스 래퍼를 수정하고 다시 작성하는 단계
- Visual Studio .NET 명령 프롬프트를 시작합니다.
- 명령 프롬프트에서 다음을 수행합니다.
- owc11이라는 디렉터리를 새로 만든 다음 이 디렉터리로 변경합니다.
md c:\owc11
cd c:\owc11 - Microsoft Windows Forms 래퍼에 대한 소스 코드를 C#으로 작성합니다.
aximp "c:\program files\common files\microsoft shared\web components\11\owc11.dll" /source
- 생성된 어셈블리 AxOWC11.dll을 삭제합니다.
del c:\owc11\axowc11.dll
- owc11이라는 디렉터리를 새로 만든 다음 이 디렉터리로 변경합니다.
- 메모장 같은 텍스트 편집기에서 C:\OWC11\AxOWC11.cs를 엽니다.
- 다음 예제와 같이 차트 구성 요소, 스프레드시트 구성 요소 및 피벗 테이블 구성 요소에 대해 생성된 클래스에 [ToolboxItem(true)]을 추가합니다.
차트 구성 요소[System.ComponentModel.ToolboxItem(true)] public class AxChartSpace : System.Windows.Forms.AxHost { ... }
[System.ComponentModel.ToolboxItem(true)] public class AxSpreadsheet : System.Windows.Forms.AxHost { ... }
[System.ComponentModel.ToolboxItem(true)] public class AxPivotTable : System.Windows.Forms.AxHost { ... }
- 다음 예제와 같이 이벤트 클래스를 ClassInterfaceType.None으로 표시합니다.
차트 구성 요소[System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)] public class AxChartSpaceEventMulticaster : OWC11.IChartEvents { ... }
[System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)] public class AxSpreadsheetEventMulticaster : OWC11.ISpreadsheetEventSink { ... }
[System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)] public class AxPivotTableEventMulticaster : OWC11.IPivotControlEvents { ... }
- 변경 내용을 AxOWC11.cs에 저장합니다.
- Visual Studio .NET 명령 프롬프트에서 다음을 수행합니다.
- C:\Program Files\Microsoft.NET\Primary Interop Assemblies를 LIB 환경 변수에 추가합니다.
set lib=c:\program files\microsoft.net\primary interop assemblies;%path%
- Microsoft Office 2003 기본 Interop 어셈블리가 설치된 GAC에서 Microsoft.Office.Interop.OWC11.dll과 MSComCtl.dll을 복사합니다.
copy %windir%\assembly\GAC\Microsoft.Office.Interop.Owc11\11.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Owc11.dll
copy %windir%\assembly\GAC\mscomctl\10.0.4504.0__31bf3856ad364e35\mscomctl.dll - 소스 파일 AxOWC11.cs를 컴파일합니다.
csc /t:library /r:microsoft.office.interop.owc11.dll /r:adodb.dll /r:msdatasrc.dll /r:mscomctl.dll axowc11.cs참고 다음과 같은 CS0108 오류 메시지가 나타납니다.new 키워드가 필요합니다.
- C:\Program Files\Microsoft.NET\Primary Interop Assemblies를 LIB 환경 변수에 추가합니다.
- Visual Studio .NET을 시작합니다.
- 새로 컴파일된 AxOWC11.dll을 도구 상자에 추가합니다.
- 도구 메뉴에서 도구 상자 사용자 지정(Visual Studio .NET 2002)이나 도구 상자 항목 추가/제거(Visual Studio .NET 2003)를 누른 다음 .NET Framework 구성 요소 탭을 누릅니다.
- .NET Framework 구성 요소 탭에서 찾아보기를 누릅니다.
- 파일 이름 텍스트 상자에 c:\owc11\axowc11.dll을 입력합니다. 열기를 누릅니다.
- 확인을 눌러 도구 상자 사용자 지정 대화 상자를 닫습니다.