C# 에서 C++로 작성된 dll 을 사용할 경우에는 DllImport 를 사용하여 손쉽게 사용할 수 있지만
C++ 에서 C#으로 작성된 dll 을 사용할 경우에는 COM으로 등록하는 작업이 추가적으로 필요합니다.
사용법에 대해서 하나씩 살펴보겠습니다.
[ C# dll ]
1. C++에서 사용가능한 메소드를 노출시키기 위한 인터페이스를 선언합니다.
Tip
- Guid 는 Visual Studio의 [ Tools ] - [ Create GUID ] 메뉴를 통해 쉽게 만들 수 있습니다.
- [ComVisible(true)] 대신 다음과 같이 Make assembly COM-Visible을 체크할 수 있습니다.
[ComVisible(true)]
[Guid("61EA822A-82BC-4CCE-A0BF-5A24855FF613")]
public interface ICShapSample
{
void ShowMessage();
}
2. 인터페이스를 상속받아 클래스를 구현합니다.
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("36EA856C-99E3-4365-B157-6C0D75173F48")]
public class CShapSample : ICShapSample
{
public void ShowMessage()
{
MessageBox.Show("Hello World!!");
}
}
3. dll 을 COM으로 등록합니다.
두 가지 방법이 있습니다.
1 ) Visual Studio를 관리자 권한으로 실행 시킨 후 다음과 같이 Register for COM interop을 선택한 후 빌드합니다.
2 ) 커맨드 창을 관리 권한으로 실행시 킨 후 regasm 을 이용해 등록합니다.
- 환경변수가 설정이 되어 있지 않으면
C:\Windows\Microsoft.NET\Framework\v4.0.30319 ( 설치 버전에 따라 다름 )
경로에 있는 RegAsm 과 regasm 파일을 dll 폴더에 복사합니다.
커맨드 창에서 dll 폴더로 이동한 후,
regasm ClassLibrary.dll /tlb 를 입력 후 실행합니다.
[ 등록이 완료되면 tlb 파일이 생성됩니다. ]
[ C++ ]
tlb 파일을 import 하여 사용합니다.
#include <Windows.h>
#import "..\ClassLibrary\bin\Debug\ClassLibrary.tlb"
using namespace ClassLibrary;
void main()
{
CoInitialize(NULL);
ICShapSamplePtr ptr(__uuidof(CShapSample));
ptr->ShowMessage();
ptr->Release();
CoUninitialize();
}
[ 실행화면 ]
'Languages > C, C++' 카테고리의 다른 글
[ 고급반 ] C++ 소켓 통신 (0) | 2010.02.08 |
---|---|
C - 중위표기식을 후위표기식으로 변환하여 계산하기 (5) | 2009.10.19 |
단기반 실습 - C++ (0) | 2009.03.05 |
단기반 - OOP 프로젝트_C++ (0) | 2009.03.05 |
단기반 - 관리프로그램 프로젝트_C언어 (0) | 2009.03.05 |