C\#로 ActiveX 컨트롤 작성(1)

C\#로 ActiveX 컨트롤 작성(1)
 
    며칠 전에 웹 프로젝트 를 만 들 려 면 ActiveX 컨트롤 을 만들어 야 합 니 다.현재 ActiveX 컨트롤 은 대부분 VB/C++를 사용 하여 개발 되 었 으 며,나 는 그들 에 대해 잘 모 르 기 때문에 익숙 한 C\#를 사용 하여 ActiveX 컨트롤 을 작성 하 는 것 을 고려 합 니 다.    우선,WinForm 컨트롤 항목 HelloWorld 를 만 들 고 Label 컨트롤 을 끌 어 옵 니 다.그림 과 같이 텍스트 는 HelloWorld 로 설정 합 니 다.
UserControl 1.cs 내용 은 다음 과 같다.
using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Windows.Forms; namespace HelloWorld {     /**////      /// UserControl1 의 요약 설명.     ///      public class Demo : System.Windows.Forms.UserControl      {         private System.Windows.Forms.Label label1;         /**////          /// 필요 한 디자이너 변수.         ///          private System.ComponentModel.Container components = null;         public Demo()          {             // 호출 Windows.Forms 창 디자이너 에 필요 한 것.             InitializeComponent();             // TODO: ...에 있다 InitComponent 호출 후 초기 화 추가        }         /**////          /// 사용 중인 모든 자원 을 정리 합 니 다.         ///          protected override void Dispose( bool disposing )          {             if( disposing )              {                 if( components != null )                     components.Dispose();             }             base.Dispose( disposing );         }         구성 요소 디자이너 가 만 든 코드\#region 구성 요소 디자이너 가 생 성 한 코드         /**////          /// 디자이너 지원 에 필요 한 방법 - 코드 편집기 사용 하지 마 세 요.          /// 이 방법의 내용 을 수정 합 니 다.         ///          private void InitializeComponent()          {             this.label1 = new System.Windows.Forms.Label();             this.SuspendLayout();             //              // label1             //              this.label1.Location = new System.Drawing.Point(32, 32);             this.label1.Name = "label1";             this.label1.Size = new System.Drawing.Size(120, 32);             this.label1.TabIndex = 0;             this.label1.Text = "HelloWorld";             this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;             //              // Demo             //              this.Controls.Add(this.label1);             this.Name = "Demo";             this.Size = new System.Drawing.Size(184, 96);             this.ResumeLayout(false);         }         #endregion     } }     이 때 프로젝트 를 컴 파일 하면 HelloWorld.dll 을 생 성 할 수 있 습 니 다.이 dll 을 IIS 의 가상 루트 디 렉 터 리 에 복사 한 다음 helloworld.htm 파일 을 만 듭 니 다.html 코드 는 다음 과 같 습 니 다.
 IE 주소 표시 줄 에 다음 주 소 를 입력 하 십시오:http://localhost/helloworld.htm,인터페이스 출현:
그림 과 같이 컨트롤 이 페이지 에 성공 적 으로 표시 되 었 습 니 다.OK,우 리 는 이미 첫 단 계 를 완성 했다.    하지만 문 제 는 여기까지 해결 되 지 않 았 다.안 믿 어?다른 기계 에서 테스트 를 해 볼 수 있 습 니 다.html 코드 와 URL 주 소 를 수정 해 야 합 니 다.원래 컨트롤 을 표시 하 는 곳 에 빨간색 포크 가 있 거나 대화 상 자 를 꺼 내 서 권한 이 없다 는 것 을 볼 수 있 습 니 다.이 결 과 는 마이크로소프트 의 기본 설정 으로 인해 발생 한 것 입 니 다.저 자 는 컨트롤 이 있 는 컨트롤 의 Assembly Info.cs/vb 에서 보안 성명 을 실행 해 야 합 니 다.이 컨트롤 은 주어진 권한 을 사용 해 야 화면 을 표시 할 수 있 습 니 다.저 희 는 Assembly Info.cs 에서 System.security 네 임 스페이스 를 참조 하고 한 마디 를 추가 합 니 다.
[assembly : AllowPartially Trusted Callers()]를 다시 컴 파일 하고 이전 dll 을 교체 하면 인터페이스 가 다시 표 시 됩 니 다.    지금까지 우리 가 작성 한 것 은 진정한 ActiveX 컨트롤 이 아니 라 는 것 을 알려 야 합 니 다.이 컨트롤 은 지금까지 자신의 디 스 플레이 만 실현 할 수 있 을 뿐 스 크 립 트 와 의 상호작용 을 실현 하거나 클 라 이언 트 의 레 지 스 트 나 디스크 를 조작 하 는 등 더 많은 기능 을 실현 할 수 없습니다.이것 은.Net Framework 의 보안 모델 에 의 해 제 한 된 것 입 니 다.이 컨트롤 이.Net Framework 보안 모델 의 제한 을 돌파 하고 스 크 립 트 와 의 상호작용 이나 클 라 이언 트 의 레 지 스 트 나 디스크 를 조작 하려 면 진정한 ActiveX 컨트롤 이 되 어야 합 니 다.다음은 아까 의 컨트롤 을 진정한 ActiveX 컨트롤 로 바 꿉 니 다.    먼저 도구>를 사용 하여 GUID 를 만 들 고 UserControl 1.cs 파일 을 수정 합 니 다.먼저 System.Runtime.InteropServices 네 임 스페이스 를 추가 하고 데모 앞 에 문 구 를 추가 합 니 다.
Guid 의 문자열 을 주의 하 십시오.바로 당신 이 만 든 Guid 문자열 입 니 다.이것 은 당신 이 만 든 ActiveX 컨트롤 의 유일한 식별 자 입 니 다.그리고 항목 속성 을 수정 합 니 다.그림: 주의 패 널 의 마지막 항목 입 니 다.우리 가 유일 하 게 수정 해 야 할 것 은 이 값 을 True 로 바 꾸 는 것 입 니 다.    재 컴 파일.우 리 는 도구>OLE/COM 대상 뷰 어 를 사용 하여 볼 수 있 습 니 다.그림: 에서 볼 수 있 습 니 다.우리 가 쓴 Hello World.Demo 는 COM 구성 요소 로 정확하게 인식 되 었 습 니 다.이제 다른 ActiveX 컨트롤 을 사용 하 는 것 처럼 웹 페이지 에 표시 할 수 있 습 니 다.Hello World.Demo 에서 마우스 오른쪽 단 추 를 누 르 십시오.그림: 에서 Copy HTMLTag to Clipboard 를 선택 하면 코드 를 클립보드 에 복사 할 수 있 습 니 다.현재,우 리 는 helloworld.htm 를 바 꾸 었 습 니 다.html 코드 는 다음 과 같 습 니 다.
   classid="clsid:9551B223-6188-4387-B293-C7D9D8173E3A" Width="184" Height="96">

IE 를 사용 하면 우리 의 컨트롤 이 웹 페이지 에 표 시 될 수 있 습 니 다.하지만 이 때 는 더 이상 예전 의.net WinForm 컨트롤 이 아니 라 진짜 ActiveX 컨트롤 입 니 다.    하지만 ActiveX 컨트롤 을 작성 하 는 작업 은 아직 완료 되 지 않 았 습 니 다.우 리 는 스 크 립 트 의 상호작용 이나 읽 기와 쓰기 I/O 를 실현 하지 못 했 고 ActiveX 컨트롤 의 자동 배포 도 실현 하지 못 했다.다음 블 로그 에서 ActiveX 컨트롤 을 작성 하 겠 습 니 다.
vs 2005 개발 환경 에서 약간의 조정 이 필요 합 니 다.속성[ComVisible(true)]을 설정 해 야 등록 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기