Programming - cpueblo.com

VC++로 만든 DLL C++Builder 정적으로 사용하기


글쓴이 : 유광희 날짜 : 2004-10-08 (금) 13:44 조회 : 20076
[펌 입니다. 원본은 링크를 찾아가시오!]

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로 바꿀려고 하니 골치가 아파.. 시간도 별로 없고... 그래서 .. 이 방법으로 하려고 합니다.
//---------------------------------------------------------------------------

Downloads

  • VC_DLL_정적_Link.zip

  •