C# 클래스 라이브러리로 프로젝트 생성

외부로 노출 할 인터페이스 정의

namespace MyServiceWrapper
{
    [Guid("7BF918A2-6633-4255-846A-3BB6A7B14151")]
    public interface IMyService
    {
        [DispId(1)]
        string MyFunction(string arg);
    }

    [Guid("01AACA37-EFEB-4277-B605-D6C05B22AFB0"),
    InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface MyService_Events
    {
    }
   
여기서 GUID는 Program Files\Microsoft Visual Studio 8\Common7\Tools\guidgen.exe 이용

    [Guid("1BDE44C8-5509-4f84-B090-4EB1BB09B101"),
    ClassInterface(ClassInterfaceType.None),
    ComSourceInterfaces(typeof(MyService_Events))]
    public class MyService : IMyService
    {
        public MyService()
        {
        }
   
        public string MyFunction(string arg)
        {
            return arg;
        }
    }
}

AssemblyInfo.cs 를 열어 [assembly: ComVisible(false)]를 true로 변경

프로젝트 속성 - 빌드 탭 - COM Interop 등록에 체크

프로젝트 빌드하면 MyServiceWrapper.dll 생성 됨

regasm MyServiceWrapper.dll /tlb:MyServiceWrapper.tlb
로 assembly 생성 및 등록 (.NET framework 2.0 SDK 필요)

생성된 DLL을 참조할 VC++ 프로젝트에서

#import <mscorlib.tlb> raw_interfaces_only
#import "MyService.tlb"
using namespace MyServiceWrapper;

추가 실제 DLL을 참조하는 부분에서

IMyServiceWrapperPtr iMyServiceWrapperPtr(__uuidof(MyService));
if(!iMyServiceWrapperPtr) return FALSE;
iMyServicePtr->MyFunction(_T("C# function"));
Posted by
TAG , , , ,

Trackback :: http://cydream.net/tt/trackback/128

댓글을 달아 주세요

  1. 사이드림 2008/12/11 05:34  댓글주소  수정/삭제  댓글쓰기

    이렇게 만들어진 DLL을 배포하고자 한다면..

    .net framwork sdk command prompt 에서
    sn -k MyService.snk
    로 snk 파일 생성

    C# DLL 프로젝트의 AssemblyInfo.cs에
    [assembly: AssemblyDelaySign(false)]
    [assembly: AssemblyKeyFile("MyService.snk")]
    [assembly: AssemblyKeyName("")]
    추가

    대상 시스템의 .net framwork sdk command promot에서
    regasm MyService.dll /tlb:MyService.tlb /code
    실행

  2. 진재연 2008/12/23 12:46  댓글주소  수정/삭제  댓글쓰기

    원하던 정보와 정 반대의 정보이지만...

    알아두면 좋은 정보네요. 좋은 정보 감사합니다!