C# Class Library
VS2013
새 프로젝트 -> Visual C# -> 클래스 라이브러리 -> 프로젝트 이름(Library 이름이 된다, 예제에서는 ClassLibrary2 이다.) ->
자동으로 Class1.cs 파일이 만들어진다.
이 Class1.cs 가 DLL 에서 불러쓸 객체의 이름이 된다.
참고 : https://support.microsoft.com/en-us/kb/828736
Class1.cs 를 우클릭하여 이름바꾸기 원하는 객체 이름으로 바꾼다.
예제에서는 SimpleCalc 로 진행한다.
----------------------------------------------------------------
SimpleCalc.cs
----------------------------------------------------------------
namespace ClassLibrary2
{
public class SimpleCalc
{
}
}
----------------------------------------------------------------
interface 를 추가 구현한다.
// Interface declaration.
public interface ICalculator
{
int Add(int Number1, int Number2);
};
----------------------------------------------------------------
SimpleCalc.cs
----------------------------------------------------------------
namespace ClassLibrary2
{
// Interface declaration.
public interface ICalculator
{
int Add(int Number1, int Number2);
};
public class SimpleCalc
{
}
}
----------------------------------------------------------------
interface를 상속 받고
interface 로 부터 상속받은 메서드를 구현한다.
// Interface implementation.
public class ManagedClass:ICalculator
{
public int Add(int Number1,int Number2)
{
return Number1+Number2;
}
}
----------------------------------------------------------------
SimpleCalc.cs
----------------------------------------------------------------
namespace ClassLibrary2
{
// Interface declaration.
public interface ICalculator
{
int Add(int Number1, int Number2);
};
public class SimpleCalc : ICalculator
{
public int Add(int Number1, int Number2)
{
return Number1 + Number2;
}
}
}
----------------------------------------------------------------
이제
Properties 를 열어서
AssemblyInfo.cs 를 열어보면
[assembly: ComVisible(false)] 를 찾아서
[assembly: ComVisible(true)]
로 변경한다.
[assembly: ComVisible(true)] 로 바꾸어야 ActiveX 로 사용이 가능하다.
이제 빌드하면
bin/Debug 폴더에
ClassLibrary2.dll 파일이 만들어진다.
궁극적으로 배포를 목적으로 하므로
Release 모드로 바꾸어준다.
빌드를 하게 되면
ClassLibrary2.dll 파일이 만들어진다.
하지만 클래스 내부의 구조가 보이게 하려면
tlb 파일이 필요하다
이 파일은
ClassLibrary2 프로젝트이름을 더블클릭하면 뜨는 속성 창에서
[빌드]
COM Interop 등록 을 체크해준다.
그러면 이제부터 빌드를 하면 tlb 파일도 같이 만들어진다.
tlb 파일과 dll 파일을 C# DLL 을 사용할 프로젝트의 폴더로 복사한다.
예제에서는 MFC 에서 해당 DLL 파일을 불러서 사용해보겠다.
사용할 cpp 파일에서
#import "ClassLibrary2.tlb" raw_interfaces_only
using namespace ClassLibrary2;
를 선언한다.
그 후 사용을 원하는 함수에서
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
ICalculatorPtr pICalc(__uuidof(SimpleCalc));
long lResult = 0;
// Call the Add method.
pICalc->Add(5, 10, &lResult);
SetDlgItemInt(IDC_STERM, (int)lResult);
// Uninitialize COM.
CoUninitialize();
이렇게 사용을 하면 된다.
ICalculatorPtr 은 Interface 로 만든 ICalculator 의 스마트포인터이다
ICalculator* 와 같다.
pICalc-> 을 통해 내부에 있는 속성과 메서드에 접근이 가능하다.
'Programming > C,CPP,CS' 카테고리의 다른 글
C# Class Library use in script (1) | 2016.04.05 |
---|---|
C# Class Library use in java (클래스 라이브러리) JACOB (0) | 2016.04.05 |
c, cpp, com, atl, stl, vc7 String (0) | 2016.03.28 |
PostMessage , SendMessage 쓰레드간 메시지 주고받을때, 동기화 (0) | 2016.03.28 |
LPSTR, LPCSTR, LPTSTR, LPCTSTR , LPWSTR, LPCWSTR 의미 (0) | 2016.03.28 |