이전포스트

[Tip] Borland C++에서 Window를 포함하는 DLL을 만들어VC++에서 사용하기. (그 반대의 경우 포함)

freemmer 2009. 2. 24. 11:52
내가 주로 클라이언트 프로그램을 만들때 사용하는 방법은 2가지가 있다.

방법1.
Borland C++로 팝업창이나 설정창등의 다이얼로그 기반(혹은 폼이라고도 한다)의 UI을 DLL로 만든다.
Visual C++로 프로젝트를 만들때 설정창등을 띄울때 위의 DLL을 로드하여 윈도우를 띄워 정보를 입력 받는다.
(이때, 메인 프로젝트는 Visual C++로 작성한 프로젝트가 된다.)
이 방법은 화려한 UI가 필요없는 관리 프로그램같은 경우 즐겨 사용하는 방법이다.

방법2.
네트워크나 파일처리등의 기능을 Visual C++을 이용하여 DLL로 만든다.
Borland C++로 프로젝트를 만들고 UI를 구현할때 해당 기능은 위의 DLL을 로드하여 처리한다.
(이때, 메인 프로젝트는 Borland C++로 작성한 프로젝트가 된다.)
이 방법은 UI가 중요시되는 프로젝트인 경우 즐겨 사용하는 방법이다.

내가 이렇게 Visual C++과 Borland C++을 혼용해서 사용하는 이유는 Borland C++은 UI를 구현하기가 너무 쉽고 화려하기 때문이다. 물론 UI쪽 개발 속도도 빠르다~. (Visual C++은 Win32 프로그래밍을 하려면 거의 필수니 장점 설명은 패스~)

이러한 방법은 아마도 많은 프로그래머들이 사용하고 있을 것이다.
비단 Borland C++만이 아닌 델파이나 펄등의 스크립트 언어 등등...

이 곳에서 내가 설명할 것은 제목에서와 같이 Borland C++(이하 BCB)과 Visual C++(이하VC)에서 DLL을 만들때 서로 교차사용할 수 있도록 해야 하는 설정?? 이다.

DLL로 만들어 교차 사용하기 위해서는 BCB나 VC에서 def파일만 추가하면 된다.

DLL을 만들때 아래와 같이 함수를 작성할 것이다.
extern "C" void __stdcall _Display(const char* pStrSrc, int nMode) {}


그럼 def파일에는
EXPORTS
;MSVC name = Borland name
_Display = _Display


이렇게 넣고 컴파일하면 끝~~이다. BCB와 VC모두 동일하다. (너무 간단하지 않은가??)

BCB에 익숙하지 않은 사람을 위해 추가 설명을 하자면.
BCB에서는 DLL을 만들때,
New -> DLL Wizard 선택
C++, VCL, VC++ Style DLL 체크해서 DLL프로젝트를 생성하면 되고.

빌드할때, VCL 컴퍼넌트를 사용했다면 프로젝트 설정에서
1. 'Packages'탭에서 Build with runtime packages 체크 해제.
2. 'C++'탭에서 Enable RTTI 체크 해제.
3. 'Linker'탭에서 Use dynamic RTL 체크 해제.
를 하고 빌드해야 한다.


주의사항으로는 BCB와 VC로 만든 DLL이 완벽하게 동작한다고는 말 할 수 없다는 것이다!!
그렇기 때문에 충분히 Test를 한 후에 프로젝트에 적용하길 바란다.

반응형