Visual Studio C#에서 만든 DLL을 C++에서 바로 쓸수는 없다.
COM 으로 노출 시켜서 사용하는 방법을 남겨둔다.
테스트로 먼저 C# DLL을 만들어야 한다.
비주얼 스튜디오 10을 기준으로 설명한다.
DLL Project를 만드는 방법은
1. 파일 -> 새로만들기 -> 프로젝트(Ctrl + Shift + N)
2. 설치된 템플릿 -> Visual C# 카테고리 -> Windows -> 클래스 라이브러리
3. 이름, 위치, 솔루션 이름을 설정, 저장할 디렉토리 설정하는 부분도 있지 말고 확인.
나는 Project 명을 TestCShapDLL로 지정하고 컴파일을 하면 TestCShapDLL.DLL로 만들어지게 할 것이다.
위의 이미지의 빨간 사각형의 "Com Interop 등록" 체크.
먼저 GUID를 생성하는 부분을 설명하겟다.
도구 -> GUID 만들기 툴을 사용한다.
위와 같은 대화상자가 나오고 여기에서 5번을 선택한다.
위와 같이 될 것이고 GUID가 맘에 들지 않으면 "새 GUID"을 클릭하면 결과에 바뀐 GUID가 나온다.
이 GUID를 "복사" 를 하면 클립보드에 올라가고 소스에 붙여넣기(Ctrl+V)를 하면 된다.
그리고 COM에 노출 시켜서 사용할 것이므로 interface class를 먼저 정의 후 상속을 받아 구현을 해야 한다.
그래서 만들어진 소스는 아래와 같다.
이제 이 DLL을 Visual Studio 6.0 / 에서 사용해 보자
필자는 2010, 6.0에서 테스트 했었다. 사용법은 둘다 같다.
먼저, 위의 만들어진 DLL 프로젝트에서 COM에 노출 옵션을 설정해서 노출을 해야 한다.
DLL 프로젝트의 속성을 "COM에 노출"을 선택해야 한다
그리고 생성된 DLL에서 tlb, 파일을 추출해야 한다
C# .net이 설치되어 있으므로 regasm 이라는 툴을 이용한다
필자의 .net 설치 폴더는 C:\Windows\Microsoft.NET\Framework 에 있고 버전은 4.0.xxx 버전을 사용하였다.
사용법은
1. regasm TestCShapDLL.DLL /tbl:TestCShapDLL.tlb
위의 내용은 DLL이 있는 곳에 regasm을 복사해서 사용한 것이고,
2. C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm TestCShapDLL.DLL /tbl:TestCShapDLL.tlb
이 tlb 파일과 DLL 파일을 사용하면된다.
tlb 파일은 import 키워드를 사용해서 추가해야 된다.
C#의 ICallClass를 사용하기 위해 C++에서 Wrapper 형식으로 만들어서 테스트 했다
아래는 CallClassWrapper.cpp 와 .h 파일이다.
CPP 파일의 2번 줄을 보면 tlb 파일을 임포트 하고 있다.
(실제 소스에는 "#import "TestCShapDLL.tlb" no_namespace named_guids" 로 되어있다.)
이렇게 하면 경로가 맞고 tlb 파일 있다면 TestCShapDLL.tlh, TestCShapDLL.tli 파일이 생긴다.
어디에 생기느냐 debug, release에 생성이 되며 이 파일은 자동 생성 된다.
"TestCShapDLL.tlh" 파일을 열어보면 "Named GUID constants initializations" 란 주석이 있다.
CLSID_CallClassImp, IID_ICallClass 가 정의 되어 있다.
추가로 테스트 했던 프로젝트는 추가해 놓겠다
OUT 폴더에 .tlh, .tli를 같이 첨부해 놓겠다.
마지막으로 C#으로 만든 DLL을 시스템에 등록하기
등록 - RegAsm /registered TestCShapDLL.DLL
참고
http://msdn.microsoft.com/en-us/library/aa645738(vs.71).aspx
'프로그래밍 > C++' 카테고리의 다른 글
Visual Studio 6.0 에 LineNumber, True Colour, WndTab 설정하기 (0) | 2015.01.17 |
---|