2008년 1월 3일 목요일

c에서 C++ 클래스 함수 가져다 쓰기

윈도우 환경이라고 가정하고 답변 드립니다. 개념만 간단히 설명드릴께요..

1. 우선 DLL이나 lib 프로젝트를 만듭니다.
개인적으로는 DLL 프로젝트를 추천합니다

2. 이미 작성된 C++ 소스를 프로젝트에 모두 추가하세요.
그곳에 존재하는 어떤 클래스의 이름을 CppClass라고 가정합니다.
그 클래스에 다음과 같은 인터페이스가 있다고 가정합시다.

ex)
class CppClass
{
public:
void Initialize(); // 객체 초기화
void Finalize(); // 객체 정리

public:
bool Operation(int a); // 어떤 호출하고 싶은 멤버
};

3. 새로운 이름의 소스파일과 헤더파일을 만들어 추가합니다.
여기서는 A.h A.cpp라고 가정합니다.

4. A.cpp에 CppClass의 static 전역객체를 하나 만듭니다.

static CppClass s_myClass;

5. 이 객체에 초기화가 필요하다면 A.cpp에
이 객체를 초기화 시키는 C 함수를 하나 만들어 넣습니다.

ex)
void __cdecl Initialize()
{
s_myClass.Initialize();
}

void __cdecl Finalize()
{
s_myClass.Finalize();
}

6. 이 객체에 호출하고 싶은 함수를 랩핑하는 C함수를 하나 만들어 넣습니다.

int __cdecl WrapperFunc(int a)
{
bool bSuccess = s_myClass.Operation(a);
if(bSuccess)
return 1;
else
return 0;
}

7 A.h 파일에 위 세개의 인터페이스들의 프로토타입을 포함시킵니다.

void __cdecl Initialize();
void __cdecl Finalize();
int __cdecl WrapperFunc(int a);

8. 컴파일하고 링크해서 DLL이나 LIB 파일을 만들어냅니다.

----------------------------------

9. 이제 만들어진 DLL이나 LIB 파일을 사용하는 C 프로젝트를 만듭니다.

10, A.h를 인클루드하고 사용하고 원하는 인터페이스를 호출하면 됩니다.

ex)
Initialize();
WrapperFunc(10);
Finalize();

그럼...

댓글 없음: