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"));
외부로 노출 할 인터페이스 정의
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>
#import "MyService.tlb"
using namespace MyServiceWrapper;
추가 실제 DLL을 참조하는 부분에서
IMyServiceWrapperPtr iMyServiceWrapperPtr(__uuidof(MyService));
if(!iMyServiceWrapperPtr) return FALSE;
iMyServicePtr->MyFunction(_T("C# function"));




댓글을 달아 주세요
이렇게 만들어진 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
실행
원하던 정보와 정 반대의 정보이지만...
알아두면 좋은 정보네요. 좋은 정보 감사합니다!