|
요렇게 만드시면 됩니다. 예제로 올려드립니다.
//--- 요건 dll의 함수들의 구현부입니다. cpp란 얘기입니다. 아래에 헤더 파일을 자세히 봐주세요
// Form은 TLTCheck와 같이 구현되어져 있습지요.. 폼은 다른 소스에 따로 구현되어있다는 얘깁니다.
// Dll의 cpp내용은 단지 구현된 Form의 함수만을 호출하는 형태가 되면 됩니다.
// 제약 사항은 주고받는 자료형이 조금 제한적인 것이죠.
// 도움이 되시면 좋겠습니다.
#pragma argsused
TLTCheck mltcheck;
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
//---------------------------------------------------------------------------
int INPEXP CheckProc_MH_LampLife()
{ return mltcheck.LampLifeProcCheck(); }
//---------------------------------------------------------------------------
int INPEXP StartProc_MH_LampLife()
{ return mltcheck.LampLifeProcStart(); }
//---------------------------------------------------------------------------
int INPEXP EndProc_MH_LampLife()
{ return mltcheck.LampLifeProcEnd(); }
//---------------------------------------------------------------------------
// ....... 계속.... 구현내용 있지만 지면관계상 생략했습니다.
/****************************************************************************/
//--- 여기 부터 헤더 입니다.
#ifdef __DLL__
#define INPEXP __declspec(dllexport)
#else
#define INPEXP __declspec(dllimport)
#endif
//---------------------------------------------------------------------------
extern "C"
{
int INPEXP CheckProc_MH_LampLife(); // 필요시 호출 요구 ret : -1(시간초과), 0(ok)
int INPEXP StartProc_MH_LampLife(); // 시작시 자동 실행됨
int INPEXP EndProc_MH_LampLife(); // 종료시 자동 실행됨
// ..... 계속, 역시 이하 내용은 생략합니다.
}
//------------------------------------------------------------------------------------
// 이렇게 생성되는 dll, h파일 혹은, dll, lib, h파일이 있으면 동적으로든, 정적으로든 사용할 수 있습니다.
// 전역 함수처럼 동작되는 것은 아시죠?
// 초보님이 보이신 구현 부분(cpp)의 함수명에도 __declspec(dllexport)가 각각 들어가야 됩니다.
// 위에서 처럼 매크로로 작성하시는게 속편합니다.
초보 님이 쓰신 글 :
: #include <basepch.h>
:
:
: #include <graphics.hpp>
: #pragma hdrstop
: #pragma package(smart_init)
: //---------------------------------------------------------------------------
:
: // Package source.
: //---------------------------------------------------------------------------
:
: //dll 프로그램부분
: #pragma argsused
: int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
: {
: return 1;
: }
: //---------------------------------------------------------------------------
: extern "C" __declspec(dllexport) void Win_Angle();
:
: void Win_Angle() <<<<<-------------------------여기 수정 필요합니다.... 뭔말인지 아시죠?
: {
: //Form2->Show();
: HWND H = FindWindow(NULL, "팡야:시즌4");
: if (H == NULL) return;
:
: HDC DC = GetDC(H);
: Graphics::TBitmap *wa=new Graphics::TBitmap;
: wa->LoadFromFile("angle.bmp");
: BitBlt(DC,0,0,800,600,wa->Canvas->Handle,0,0,SRCCOPY);
:
: ReleaseDC(H, DC);
:
: }
: //여기가지 dll
:
: //여기서부터 호출부분;
: #pragma hdrstop
:
: #include "Unit2.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: typedef void (*MY_FUNC_testDLL)();
: #pragma resource "*.dfm"
: TForm2 *Form2;
: //---------------------------------------------------------------------------
: __fastcall TForm2::TForm2(TComponent* Owner)
: : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm2::Button1Click(TObject *Sender)
: {
: HINSTANCE dll;
: dll = LoadLibraryEx ("winangle.bpl" , NULL, LOAD_LIBRARY_AS_DATAFILE );
: MY_FUNC_testDLL Win_Angle=(MY_FUNC_testDLL)::GetProcAddress(dll,"Win_Angle");
: //함수사용부분?
: }
: //여기까지호출부분입니다
: 여기서 잘못된부분 지적좀 해주세요
: bpl패키지로해논겁니다
: 그리고 라이브러리 호출됬다면 함수사용부분에 바로 사용하면되나요?
|