1. c#.DLL 프로젝트 생성
Class Library(.NET Framework) 생성
프로젝트 ==> 속성
1.1 응용프로그램 ==> 어셈블리 정보 ==> 어셈블리를 COM에 노출(M) ==> 체크
1.2 빌드 ==> COM interop 등록(C) ==> 체크 *) 출력 경로에 c#.tlb 파일이 자동 생성 된다.
2. tlh 생성 하려면
프로젝트 파일이(*.sln) 있는곳에 c#.dll과 c#.tlb 파일을 위치 시킨다.
프로젝트 출력 파일이 있는곳에 위치하면 c#.tlb파일이 삭제되어 에러 낸다.
간혹) #import 지정 경로에 있지 않을때
프로젝트 ==> 추가 ==> 기존항목 ==> ... ==> c#.tlh를 프로젝트에 포함 시킨다.
COM interop 등록(C) 체크 되어 있을때는 자동으로 생성 된다.
VC++에서 클래스마법사 ==> 클래스 추가(C) ==> TypeLib의 MFC클래스
ActiveX컨트롤의 MFC클래스
3. CLSID_*과 IID_*를 생성 하려면
#import "D:\...\c#.tlb" no_namespace named_guids 문을 소스에 포함하고 컴파일 하면
c#.tlh 파일이 자동 생성된다.
이때 생성된 c#.tlh 파일 내용중 "// Named GUID constants initializations "에 GUID가정의 되어 있다.
EX)
//
// Named GUID constants initializations
//
extern "C" const GUID __declspec(selectany) LIBID_ExMakeDLL =
{0x83a81205,0x6498,0x4330,{0xb4,0xdc,0xa5,0xf5,0x66,0xb7,0x3a,0x83}};
extern "C" const GUID __declspec(selectany) IID_ICallClass =
{0x357ccedb,0x44a1,0x481e,{0xa4,0x2a,0x0d,0x4d,0xca,0x8c,0x5e,0xea}};
extern "C" const GUID __declspec(selectany) CLSID_Class2 =
{0x199a04ba,0xbf3d,0x4a89,{0xbb,0x28,0x91,0x64,0x5a,0x5d,0x57,0x2c}};
extern "C" const GUID __declspec(selectany) IID__Class2 =
{0x76618522,0x77a4,0x378b,{0xa8,0x45,0x50,0xe3,0xe6,0xf7,0xf1,0xae}};
3. C++에서 C# dll 사용은
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_Class2, NULL, CLSCTX_INPROC_SERVER, IID_ICallClass, reinterpret_cast<void**>(&pp));
if (SUCCEEDED(hr)) {
pp->setInfo( L"name", 27, L"8888-8888");
pp->showInfo();
}//if