티스토리 뷰
C# COM 만들기
윈도우10, VisualStudio2017 기준
MFC Client : http://petra.tistory.com/1133
1. Visual Stidio 2017을 관리자 모드로 실행한다.
2. 아래 그림처럼 클래스 라이브러리(.NET Framework) _COMTest 프로젝트를 만든다.
3. 기본 코드가 만들어 진다.
(참고, 이 상태에서 컴파일하면 일반적인 dll 파일이 만들어진다.)
4. Any CPU를 x86 으로 바꿔야 하므로, 아래 그림처럼 구성관리자를 선택한다.
5. 아래 그림처럼 플랫폼에서 새로만들기 선택한다.
6. 아래 그림처럼 새 플랫폼을 x86을 선택한다.
7. 그러면 아래 그림처럼 x86으로 바뀐다.
8. 아래 그림처럼 솔루션탐색기에서 _COMTest를 선택하고 마우스 우측버튼 눌러 속성 메뉴룰 선택한다.
9. 아래 그리은 속성 창으로 어셈블리정보 버튼을 클릭.
10. 아래 그림에서 어셈블리를 COM에 노출을 체크(노란색 부분) 한다.
11. 아래 그림에서 빌드를 선택하고 COM interop 등록을 체크 한다. (노란색 부분)
이렇게 하면 컴파일 시 COM 등록되고, tlb 파일이 자동으로 만들어준다.
(tlb 파일은 COM 참조하는 클라이언트에서 사용한다.)
12. 아래 그림처럼 7행에 using System.Runtime.InteropServices; 을 추가한다.
13. 도구 메뉴에서 GUID만들기 메뉴를 클릭
14. 아래 그림처럼 5번을 선택하고 새GUID버튼을 누르고 복사 버튼을 누른다.
15. 위 에서 복사한 (위 그림 결과에 있는데 GUID값) 을 아래 그림처럼 11행에 붙여 넣고, 12~15행까지 코드를 입력한다. (Interface를 만든다.)
16. 14번에서처럼 GUID값을 새로 받아 17행에 붙여넣는다.
18행에서 Class1 클래스에 I_COMTest 를 상속받게 지정한다.
Interface 함수를 Class1 클래스에서 재정의(20~33행) 해준다.
17. 컴파일 한다.
18. 아래 그림처럼 DLL, TLB 파일이 만들어 진다.
만약, TLB 파일이 안만들어 지면 'Developer Command Prompt VS 2017'을 관리자 모드로 실행하고
REGASM C:\CS\_COMTest\_COMTest\bin\x86\Debug /tlb 를 실행하면 DLL 등록이 되면 TLB 파일을 만들어준다.
REGASM 으로 등록해도 Regedit에서 CLSID에서는 안보일 수 있으나 Client 프로그램 실행에는 이상없었다.
레지스트리에 꼭 등록하고 싶으면 REGASM C:\CS\_COMTest\_COMTest\bin\x86\Debug /regfile 로 실행하면 reg 파일이 만들어 지고 이 reg 파일을 더블클릭하면 레지스트리에 등록된다.
_COMTest.cs 소스>
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 |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace _COMTest
{
[Guid("C3D263E4-5484-456A-BCC7-1031F34E543F")]
public interface I_COMTest
{
void computedAdd(int A, int B, ref int C);
}
[Guid("0173DB78-92DB-44AA-ACFC-A51719B97257")]
public class Class1 : I_COMTest
{
public void computedAdd(int A, int B, ref int C)
{
C = A + B;
}
}
} |
cs |
소스 파일은 : http://petra.tistory.com/1134
참조사이트 : http://blog.naver.com/ocllos/220464927065
COM 다른 PC에 배포 : http://petra.tistory.com/1145
(실해안되는 경우도 있네...., .NET Framework 설치 필요)
COM 을 COM+ 바꾸기 : http://petra.tistory.com/1144