티스토리 뷰

전공/C#

c# 익스플로러 툴바 만들기(1)

무한공백 2015. 7. 10. 10:18

익스플로러 툴바 만들면서 삽질했던 내용 기록.  내가 만든 샘플 프로젝트   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 가 등록된 것을 확인 할 수 있다.





그런데!!! 이것이 문제가 좀 있다.

삭제가 안된다. -_ -.. 다음 클리너에서도 안나타난다. 일단.. 다시 확인해 봐야겠다.





댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함