성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] How can I tell whether two programs...
[정성태] The case of the fail-fast crashes c...
[정성태] Creating Docker multi-arch images f...
[정성태] BinaryFormatter removed from .NET 9...
[정성태] Extending the Windows Shell Progres...
[우광현] 와..... 범위를 잡았으니 클라이언트가 해당 범위를 확인해본다...
[정성태] 딱히, 그것 이상으로 더 설명할 내용이 없습니다. 동적 포...
[정성태] If Windows 3.11 required a 32-bit p...
[정성태] What is a hard error, and what make...
[괴물신인] 질문작성자인데 이 글을 이제봤네요 ㄷㄷ 이 글처럼 타입별로 인...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>regasm.exe로 어셈블리 등록 시 시스템 변경 사항 (3) - Type Library</h1> <p> 지난번 글에 이어서,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > regasm.exe로 어셈블리 등록 시 시스템 변경 사항 (2) - .NET 4.0 + .NET 2.0 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1287'>http://www.sysnet.pe.kr/2/0/1287</a> </pre> <br /> 예제를 다양화하기 위해 그 당시 테스트 환경을 다음과 같이 3개의 프로젝트로 분리했습니다.<br /> <br /> <img alt='regasm_tlb_1.png' src='/SysWebRes/bbs/regasm_tlb_1.png' /><br /> <br /> ComBaseClass는 IAdminCode.cs 인터페이스를 보관해서, ConsoleApplication1 프로젝트와 ClassLibraryAsAdmin 프로젝트의 직접적인 참조관계를 끊어버렸습니다. 이렇게 예제를 바꾸면 관리해야 할 DLL이 한 개 더 늘어나므로 약간 귀찮은 면은 있습니다.<br /> <br /> 어쨌든, 여기까지 적용된 시스템 변경 사항은 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > === ClassLibraryAsAdmin의 CLSID/ProgId === ClassLibraryAsAdmin.AdminCode CLSID\{41AC8568-9230-4E63-B7C5-CAAD997EE207} Wow6432Node\ClassLibraryAsAdmin.AdminCode Wow6432Node\CLSID\{41AC8568-9230-4E63-B7C5-CAAD997EE207} === GAC에 등록된 2개의 DLL 파일 === c:\windows\assembly\GAC_MSIL\ComBaseClass\1.0.0.0__c91e971f6240da9f\ComBaseClass.dll c:\windows\assembly\GAC_MSIL\ClassLibraryAsAdmin\1.0.0.0__465ff3ec4fc809d7\ClassLibraryAsAdmin.dll </pre> <br /> 나아가서, regasm.exe에서 /tlb 옵션을 주어 등록을 하면 어떻게 될까요?<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > %windir%\Microsoft.NET\Framework\v2.0.50727\regasm.exe ComBaseClass.dll /tlb %windir%\Microsoft.NET\Framework\v2.0.50727\regasm.exe ClassLibraryAsAdmin.dll /tlb </pre> <br /> 그러면, 제법 많은 변화가 발생합니다. 우선, 인터페이스가 레지스트리에 등록되고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > === ComBaseClass.dll에 정의된 인터페이스 === Interface\{23172F2F-A3D3-4180-97AE-7805F74A5A46} Wow6432Node\Interface\{23172F2F-A3D3-4180-97AE-7805F74A5A46} === ClassLibraryAsAdmin.dll에 정의된 인터페이스 === Interface\{D7CE4B41-D2A5-3CCD-BF38-5B8197825E09} Wow6432Node\Interface\{D7CE4B41-D2A5-3CCD-BF38-5B8197825E09} </pre> <br /> 이어서 해당 인터페이스에 정의된 레지스트리를 가보면 다음과 같이 TypeLib가 연결된 것을 볼 수 있습니다.<br /> <br /> <img alt='regasm_tlb_2.png' src='/SysWebRes/bbs/regasm_tlb_2.png' /><br /> <br /> 그리고, 각각의 타입라이브러리를 찾아가보면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > HKEY_CLASSES_ROOT\TypeLib\{728F14FE-B021-43EF-8AAC-D37A4AF5ED6A} HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{728F14FE-B021-43EF-8AAC-D37A4AF5ED6A} </pre> <br /> 다음과 같이 regasm.exe /tlb 옵션으로 해당 폴더에 생성된 TLB 파일을 가리키는 것을 확인할 수 있습니다.<br /> <br /> <img alt='regasm_tlb_3.png' src='/SysWebRes/bbs/regasm_tlb_3.png' /><br /> <br /> 마지막으로 Type Library까지 등록된 경우 시스템에 가해지는 변경 사항은 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > === ClassLibraryAsAdmin에 대한 ProgId/CLSID === ClassLibraryAsAdmin.AdminCode CLSID\{41AC8568-9230-4E63-B7C5-CAAD997EE207} Wow6432Node\ClassLibraryAsAdmin.AdminCode Wow6432Node\CLSID\{41AC8568-9230-4E63-B7C5-CAAD997EE207} === ClassLibraryAsAdmin에 대한 TypeLibrary === TypeLib\{728F14FE-B021-43EF-8AAC-D37A4AF5ED6A} Wow6432Node\TypeLib\{728F14FE-B021-43EF-8AAC-D37A4AF5ED6A} === ComBaseClass에 대한 TypeLibrary === TypeLib\{1CCE4407-4EA5-4A60-BAF8-809AB169CE4D} Wow6432Node\TypeLib\{1CCE4407-4EA5-4A60-BAF8-809AB169CE4D} === ClassLibraryAsAdmin에 대한 Interface === Interface\{D7CE4B41-D2A5-3CCD-BF38-5B8197825E09} Wow6432Node\Interface\{D7CE4B41-D2A5-3CCD-BF38-5B8197825E09} === ComBaseClass에 대한 Interface === Interface\{23172F2F-A3D3-4180-97AE-7805F74A5A46} Wow6432Node\Interface\{23172F2F-A3D3-4180-97AE-7805F74A5A46} </pre> <br /> 파일은 TLB 파일까지 포함하게 되어 4개로 늘어납니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\windows\assembly\GAC_MSIL\ComBaseClass\1.0.0.0__c91e971f6240da9f\ComBaseClass.dll c:\windows\assembly\GAC_MSIL\ClassLibraryAsAdmin\1.0.0.0__465ff3ec4fc809d7\ClassLibraryAsAdmin.dll D:\temp\net20\AnyCPU\ClassLibraryAsAdmin.tlb D:\temp\net20\AnyCPU\ComBaseClass.tlb </pre> <br /> regasm.exe의 등록으로 인한 시스템 변경 사항은 여기까지가 끝입니다. ^^<br /> <br /> * <a target='tab' href='http://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=718&boardid=331301885'>첨부된 파일은 여기까지 실습을 해온 간단한 3개의 프로젝트를 포함</a>합니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1406
(왼쪽의 숫자를 입력해야 합니다.)