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

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[51] VC++로 만든 DLL C++Builder 정적으로 사용하기 .....
박영목 [gsbsoft] 31179 읽음    2004-05-12 13:52
Hi! 방가방가.....   부산 DT&C의 박영목 입니다.  ㅋㅋㅋㅋㅋ.............

델파이에서는 아주 잘 되더니(아주 간단히 되더군요... 그런데 변수명칭이 달라.. 조금 귀찮음)

.... 이게 빌더에서는

잘 안된다. lib의 형식 COFF를  OMF로 바꾸어야 한다.
그런데 COFF2OMF.exe가 이상하다는 등의  Q&A에 도배가 되어 있네요,...
하긴 저도 COFF2OMF.exe 이것은 뭔가 이상해 HEX로 보면 거의 0x00으로 채워져 있어요....

정도 이게 사용할 일이 생겨서... 어제부터 이것 저것 해보다....
오늘 잘 되네요....

동적으로 하는 것은 잘 되더군요....

1. VC++에서 DLL을 하나 만든다. 물론 Release 모드로.....  이런 형태로 ->  void WINAPI VC_Draw( HDC hdc )  

2. DLL을 사용하고자는 C++Builder의 현재 작업 폴더로 복사... lib 파일은 필요없음

3. 명령 프롬프트를 사용해서 아니면 도스모드에서
   작업폴더에 ExDll.dll이 있다고 가정하고...    implib ExDll ExDll.dll (Enter)  ExDll.lib 생성

4. C++ Builder 프로젝터에 ExDll.lib을 Add 하세요.... 


5. extern "C" __declspec(dllexport) void __stdcall VC_Draw( HDC hdc );   //이런 형태로 소스 상단에 선언해 주세요...

6. 실행하시면 됩니다.



//---------------------------------------------------------------------------

VC++ DLL에서 class 사용하던 어쨌던 모든 것을 만들고....
그것을 호출하는 함수는

void WINAPI VC_Draw( HDC hdc )   이런 형태로 만들고

이 함수 내부에서 VC++ Class로 만든 것을 호출하는 식으로 하시면 VC++의 모든 것을 사용할 수 있습니다.  너무 쉽게 설명하는 것 같다...

다 아실 것인데.... ㅋㅋㅋㅋㅋㅋ

//---------------------------------------------------------------------------


C++ Builder소스는 환경이 다른면 컴파일이 잘 되어 초보자는 힘들어 하더군요.....   실행만 해 보고 직접 만들어 보세요... 안되면

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

struct stNameAdd {
         char name[12+1];
         char add[60+1];
};

extern "C" __declspec(dllexport) bool __stdcall ExeGetPah(LPCTSTR Path);
extern "C" __declspec(dllexport) stNameAdd __stdcall ExeInputDlg( stNameAdd data );
extern "C" __declspec(dllexport) void __stdcall VC_Draw( HDC hdc );


__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BtnExeGetPahClick(TObject *Sender)
{
  //ExeGetPah( "Project2.exe" );    외부프로그램 실행
}
//---------------------------------------------------------------------------


void __fastcall TForm1::BtnExeInputDlgClick(TObject *Sender)
{
  stNameAdd data;
  AnsiString str;

  strcpy( data.name, "gsbsoft" );
  strcpy( data.add,  "Busan City" );
  data = ExeInputDlg( data );        // VC++로 만든 Dialog에 매개변수를 집어넣고 바뀐 값을 다시 Return

  str =  data.name;
  str += ", ";
  str += data.add;

  ShowMessage( str );
}
//---------------------------------------------------------------------------


void __fastcall TForm1::BtnVCDrawClick(TObject *Sender)
{
  VC_Draw( Image1->Canvas->Handle );   //그림에 원을 그려준다.
  Image1->Refresh();                   //현재 VC++로 된 고도의 지형을 그려주는 루틴이 있습니다.
}                                      //이것을 C++ Builder로 바꿀려고 하니 골치가 아파.. 시간도 별로 없고... 그래서 .. 이 방법으로 하려고 합니다.
//---------------------------------------------------------------------------

황경록 [mpbox]   2005-05-27 00:19 X
str =  data.name;
  str += ", ";
  str += data.add;

+_+ 옵티마이징 코드로군요 ~ 불필요한 임시변수를 사용하지 않도록 한다는^^

+ -

관련 글 리스트
51 VC++로 만든 DLL C++Builder 정적으로 사용하기 ..... 박영목 31179 2004/05/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.