2012-04-12 3 views
2

어떻게 처음에 다시 쓸 필요가 없도록 COM 서버를 CLR 어셈블리로 변환 할 수 있습니까?COM 어셈블리를 CLR 어셈블리로 변환하는 방법은 무엇입니까?

+1

인가이 같은 의미 : COM 객체를 사용

enter image description here

클라이언트는 COM 기능을 사용하기 위해, 2

#using "Add32Pkg"; 

다음 단계에서 생성 된 네임 스페이스를 사용하여 메타 데이터를 가져와야합니다 (아주 좋은, 포괄적 인) 자체 답변? 그것은 어느 쪽의 질문이라도 놓치기 때문에! – Widor

+0

COM 어셈블리를 CLR 어셈블리로 변환하는 작업에 대한 문서를 제공하는 제 방법이었습니다. 커뮤니티와 공유하고 싶었습니다. –

+1

그건 괜찮아요 (그리고 격려해) - 그냥 '[더 나은 예의] (http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions-even-those-where-i- 알고 있기 전에 대답하기 ')를 사용하여 질문에 대답하고 자신의 질문에 대답하십시오. 이것은 두 가지를 허용합니다 - 다른 것들은 잠재적으로 더 나은 답변을 추가 할 수 있고 대답을 찾는 사람들은보다 쉽게 ​​검색 할 수 있습니다. – Widor

답변

0

나는 이것을 OP에 게시했습니다. 질문을 편집하기 위해 origionally 게시했습니다.

.NET에서 (1992 년에 C++/MFC를 사용하여 작성한) COM 서버를 다시 작성하는 대신 CLR 어셈블리로 변환하기로 결정했습니다. COM 어셈블리 (add32.exe)를 가져와 .Net 클라이언트에서 사용하려면 호출 가능 래퍼를 만들어야합니다. Visual Studio 명령 프롬프트 (관리자)로 모든 도구를 실행하십시오.

1 단계 : 강력한 이름의 COM 어셈블리에 서명

enter image description here

2 단계 : CLR 어셈블리에 COM 형식 라이브러리에있는 정의를 변환하는

정의 변환 Tlbimp.exe 도구를 사용하여 COM 형식 라이브러리에서 CLR 어셈블리로 찾았습니다. Tlbimp.exe의 출력은 원본 형식 라이브러리 내에 정의 된 형식의 런타임 메타 데이터가 들어있는 이진 파일 (어셈블리)입니다. 출력은 DLL 파일입니다. .Net COM 클라이언트에 메타 데이터를 쉽게 포함 할 수 있도록 네임 스페이스를 지정합니다.

enter image description here

단계 3 : Ildasm.exe를 어셈블리를 볼 수 있습니다. enter image description here

우리는 솔루션에 대한 참조를 만들려면 CLR 어셈블리를 사용합니다. dll 파일을 찾아서 참조로 추가하십시오.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 
using Add32Pkg; 

namespace TestAdd32 
{ 

    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 

      Add32Server Add32 = new Add32Server(); 
      Add32.Init(201); 
     } 
    } 
} 
관련 문제