티스토리 뷰
익스플로러 툴바 만들면서 삽질했던 내용 기록. 내가 만든 샘플 프로젝트 TestToolBar.zip
혹시 모르니, Visual Studio를 관리자 권한으로 실행한다.
[준비사항]
1. 참조 프로젝트를 다운로드 받는다.
http://www.codeproject.com/Articles/2219/Extending-Explorer-with-Band-Objects-using-NET-and
2. gacutil.exe 가 있는지 확인한다.
그런데 이게 어디있냐 하면.. 아래의 위치에 있다.
아래의 위치에 없다면 .Net 1.1 또는 1.0 버전을 설치하도록 한다.
- %programfiles%\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\gacutil.exe
- %programfiles%\Microsoft SDKs\Windows\v6.0\Bin //7버전에도 있다.
- %programfiles%\Microsoft SDKs\Windows\v6.0A\Bin
- %windir%\Microsoft.NET\Framework\v1.0.3705
- %windir%\Microsoft.NET\Framework\v1.1.4322
3. regasm.exe 가 있는지 확인한다.
이건 또 어디있냐 하면... 아래의 위치에 있다.
없다면, .Net 을 설치하면 된다. .Net 4 버전에 있었다.
- C:\Windows\Microsoft.NET\Framework\설치된버전\regasm.exe
------------------------------------------[시작]-----------------------------------------------
먼저, 코드프로젝트의 1번을 보면 GAC 를 이용하여 dll을 등록하는 방식으로 진행한다고 나와있으며. 이를 이용하여 BandObjectLib.dll 와 Interop.SHDocVw.dll을 등록하라고 나와있다.
1. 코드프로젝트에서 다운받은 BandObjectLib 프로젝트를 빌드하여 BandObjectLib.dll, Interop.SHDocVw.dll 등록하기.
등록을 하기 편하게 하기 위해서 다운받은 샘플에서는 RegisterLib 라는 프로젝트를 제공하는데, [속성] - [빌드 이벤트] - [빌드 후 이벤트] 에 다음의 명령어가 적혀 있다.
즉, 솔루션만 빌드하면 자동으로 등록된다는 소리!!
하지만, 솔루션을 빌드해보니.......
내가 하는 일이 늘 그렇듯...... 안됀다!!! 왜!! 왜!!!!!!!
SHDocVw가 분명 참조되어 있는데도,,, 못찼겠다고 에러가 발생한다.
하는 수 없이...
기존 SHDocVw를 제거하고, [ 참조 추가 ] - [COM] 탭에서 [ Microsoft Internet Controls ]를 추가했다.
그리고, 솔루션 빌드를 하도록 한다.
아래와 같이 나오면 성공.
2. C# Windows Form 컨트롤 라이브러리 생성
이제 본격적으로 툴바를 만들자.
먼저, C# Windows Form 컨트롤 라이브러리를 생성하고, 대상 프레임 워크를 반드시 [ .NET 2.0 ] 으로 지정한다.
[프로젝트 속성] - [응용 프로그램] 탭에서 [어셈블리 정보] 를 클릭하고, [어셈블리를 COM에 노출] 에 체크한다.
( 안그러면,,, http://fallingstar.tistory.com/159 <<< 요기와 같이 RA0000 에러가 나타난다.)
[프로젝트 속성] - [ 서명 ] 탭에서 [ 어셈블리 서명 ] 에 체크한 후 [새로 만들기] 를 한다. ( 암호로 내키 보호는 안해도 된다.)
[윈도우 시작 버튼] - [ 모든 프로그램 ] - [ Microsoft Visual Studio XXXX ] - [ Microsoft Windows SDK Tools ] 에
GUID 생성기를 클릭하여 5번 모드로 Guid를 하나 생성해 놓는다.
CS 파일을 열어 디자인 후, 코드의 가장 상단에 아래의 2줄을 선언한다.
using BandObjectLib; using System.Runtime.InteropServices;
[참조 추가] 에서 BandObjectLib.dll 를 추가하도록 한다.
클래스의 상속을 UserControl 에서 BandObject로 바꾸고 , 클래스 위쪽에 GUID와 BandObject 속승을 다음과 같이 추가한다.
[Guid("C9E512BA-D3FD-431B-98AC-7F02C92056F3")] //아까 얻어놓은 GUID 사용. 이 코드에 있는것 그대로 사용해도 상관없음 . // "표시할 이름" , "탐색기툴바 | 익스플로러 툴바 | 작업표시줄 툴바, 헬프 텍트스 순으로 가능하다. 우리는 익스플로러 툴바만 지정한다. //[BandObject("Test ToolBar", BandObjectStyle.Horizontal | BandObjectStyle.ExplorerToolbar | BandObjectStyle.TaskbarToolBar, HelpText = "Quick search")] [BandObject("Test ToolBar",BandObjectStyle.ExplorerToolbar, HelpText = "")] public partial class QuickSearch : BandObject //BandObject를 상속받도록 수정한다.
[파일] - [추가] - [새프로젝트] - [Visual C++] - [빈 프로젝트] 를 Register 라는 이름으로 만든다.
[Register 속성 페이지] - [구성 속성] - [일반] 을 아래와 같이 설정한다.
구성은 유틸리티, 공용언어 런타임 지원, 이전 구문 으로..
[빌드 이벤트] - [빌드 후 이벤트] - [명령어] 를 아래와 같이 편집한다.
주의할 점은 가장 첫 줄의 cd $(ProjectDir)..\(자신의프로젝트폴더명)\bin\Debug 이런식으로 Dll 이 출력되는 경로를 지정한다.
솔루션 전체를 빌드하고, 익스플로러를 실행하면 아래와 같이 Test ToolBar 가 등록된 것을 확인 할 수 있다.
그런데!!! 이것이 문제가 좀 있다.
삭제가 안된다. -_ -.. 다음 클리너에서도 안나타난다. 일단.. 다시 확인해 봐야겠다.
'전공 > C#' 카테고리의 다른 글
C# 윈도우 작업 스케줄러 작업 등록. (0) | 2017.01.09 |
---|---|
Winform 마우스 이벤트를 받지 않는 컨트롤 만들기, Winform IsHitTestVisible (0) | 2015.08.07 |
윈폼에서 SHDocVw 참조, 익스플로러 제어 (0) | 2015.07.09 |
Regasm, warning RA0000: No types were registered (0) | 2015.07.09 |
C# SendMessage string 전달 (2) | 2015.07.06 |