반응형

안녕하세요. 오늘은 C# COM모듈을 C++에서 사용하는 방법을 알아 보겠습니다.

C#은 많은 Class를 포함하고 있어 C++보다

빠르고 유용하게 사용할 수 있는 좋은 장점이 있습니다.


 

이번 프로젝트는 C# 메시지 박스를 C++에서 출력해보겠습니다.

 

  

클래스 라이브러리 프로젝트를 생성합니다.

 

 

 

C#모듈을 외부 모듈에서 사용하기 위해서는 기본 설정인 Any CPU를 반드시 x86, x64로 변경해야 합니다.

꼭 확인해주세요. ^^

 

 

 

COM tlb를 사용하기 위해서 설정에서 “COM Interop등록”을 체크해주세요.

 

 

 

어셈블리 설정에서 “어셈블리를 COM에 노출”을 체크해주세요.

 

 

 

COM모듈로 사용하기 위해서 기본 Interface를 노출해야 합니다.

그래서 기본이 되는 Interface를 생성해주세요.

생성된 Interface를 상속 받아 Class를 생성합니다.

 

 

 

COM을 사용하기 위해서는 고정 GUID가 필요합니다.

GUID Tool을 사용해서 두개의 새 GUID를 생성해서 복사 합니다.

 

생성된 CallModule.dll을 COM으로 사용하기 위해서는 Interface가 정의 된 .tlb파일이 필요합니다.

 

 

 

RegAsm.exe를 사용해서 .tlb를 생성해야 합니다.

가장 중요한 것은 RegAsm.exe를 컴파일 버전에 따라서 복사 후 사용하셔야 합니다.

저는 x64로 컴파일 했기 때문에 x64용 RegAsm.exe를 사용했습니다.

경로는 “C:\Windows\Microsoft.NET\Framework64\v4.0.30319”입니다.

설치 환경에 따라 다르지만, 꼭 컴파일 버전별로 확인해주세요.

위에 보이시는 것 처럼 “Regasm 모듈명 /tlb:이름.tlb” 명령어를 실행합니다.

그럼 실행 위치에 설정한 .tlb파일이 생성 됩니다.

생성된 .tlb파일은 c++프로젝트로 복사해주세요.

 

이제 C++ 프로젝트를 생성해주십시오.

C++에서는 C# COM Class를 확인 할 수 없기 때문에 별도 Wrepper Class를 만들어야 합니다.

 

 

CallClassWrapper.cpp 입니다.

 

 

 

CallClassWrapper.h 입니다.

.tlb를 포함하게 되면 컴파일 폴더에 .tlh가 생성 됩니다.

이 .tlh를 참고해서 CLSID, DIID를 설정하면 됩니다.

 

CallModule.zip

 

 처음 컴파일에 오류가 발생하게 되면 생성된 .tlh를 확인해서 CLSID, DIID를 동일하게 하면

문제 없이 동작합니다.

 

빌드는 Visual Studio 2015에서 진행 했습니다.

 

C# COM모듈을 C++에서 사용하는 방법을 알아 보았습니다.

감사합니다.

 

 

 

반응형

+ Recent posts