C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1087] BCB & VC 공용 DLL 만들때 TIP
김태선 [cppbuilder] 8703 읽음    2012-04-11 17:13
주로 장비 관련해서 제공되는 DLL을 보면, 거의 다 VC 용입니다.

빌더의 implib 프로그램으로 VC용 DLL에서 lib를 추출해서
빌더에 붙여서 쓰면 될것 같은데 이게 그냥 안되죠.

우선 클래스를 export 하는 VC의 확장 DLL인 경우는
바로 쓸수 있는 방법은 절대 없습니다.

또, 표준 DLL이라고 하더라도 C++로 된 함수 명칭은 변형이 일어나기 때문에
그 명칭을 그대로 받을 수도 없습니다.
같은 VC에서는 인식을 해도 빌더에서는 인식이 안됩니다.

되는건 extern "C" 로 만들어진 함수에 한해서 인식이 되며,
이 경우도 함수 명칭 그대로 lib에 들어가기 때문에
빌더에서는 링크해서 쓸수 없습니다.

빌더에서는 함수 명칭 앞에 _ 언더바를 붙이는 것이 default 이기 때문입니다.
그렇다고 프로젝트 옵션에서 default 를 조정하는 건 RTL 링크에 문제가 생기기 때문에 사실 쓰기 곤란합니다.

제가 잘 쓰는 방법은
빌더/델파이를 위한 링크용 DLL을 VC로 하나 만들어
이 DLL을 가지고 제공되는 DLL을 제어하는 방법을 씁니다.

이는 링크 DLL 뿐만 아니라, 다른 목적으로 VC로 DLL을 만들어 빌더/델파이에 제공할때
동일하게 적용되는 사항인데,

VC로 만들때

extern "C" __declspec(dllexport) 리턴값 __stdcall 함수명(형 인자);

이렇게 만들면
함수명에 대한 명칭 변환이 일어나지 않으며,
__stdcall이라서 빌더에서 _ 언더바를 붙이지 않고 링크하게 됩니다.


이거 하나만 제대로 알면 VC와 빌더/델파이와 붙일때 매우 편리합니다.

또 VC 클래스를 인터페이스로 export 하여 빌더/델파이에서 그대로 쓰는 방법이 있는데,
이는 강좌에 제 글을 찾아 보면 됩니다.

저는 VC와 빌더와의 링크 DLL을 만들때는 모든 기능은 클래스로 만들어 다 때려 넣고
오직 이 클래스의 인터페이스를 리턴하는 함수 딱 하나만 외부로 노출한
DLL을 제작해서 붙입니다.

그럼.
김태선 [cppbuilder]   2012-04-12 11:41 X
참고로
VC로 만든 표준 DLL에서 (호출규약이 __stdcall이 아닌)
BCB용 lib 뽑아내는건

implib -a DLL_bc.lib DLL.dll

-a 는 _ 언더바를 자동으로 함수명 앞에 붙여 주는 옵션이고,
뽑혀 나온 함수 명칭 확인하는 방법은

tlib DLL_bc.lib, DLL_bc.txt

이렇게 확인할 수 있고,
만들어진 lib를 프로젝트에 끌어 놓거나
cpp 소스 에서
#pragma link "DLL_bc.lib"

또는
#pragma comment(lib, "DLL_bc.lib")

이렇게 정적링크를 할수 있습니다.

검색하면 그리 어렵지 않게 찾을 수 있지만,
그래도 한번 열거해 봅니다.

김태선 [cppbuilder]   2012-04-25 14:50 X
그리고 VC용 lib를 BCB용 lib로 변환은

coff2omf dll.lib dll_bc.lib 식으로 변환합니다.

coff2omf의 문제로 변환이 잘안될때는
자료실에 보면
coff2omf2.exe 가 있으니 그것으로 시도해보고

이것도 잘 안되면 DLL에서 implib로 직접 추출해 내면 됩니다.

+ -

관련 글 리스트
1087 BCB & VC 공용 DLL 만들때 TIP 김태선 8703 2012/04/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.