일단 하려고 한 목표는 bpl에 폼을 넣어서 사용하려고 합니다.
dll에 폼을 넣어서 사용하는 방법은 많이 써봤는데
bpl 에 넣어서 사용하면 편리하다는 얘기가 많이 있어서 테스트 해봤습니다.
그러나 역시 한번에 되는 것은 없군요 쩝..
에러 하나때문에.. OTL
패키지 프로젝트를 새로 만들어서
일단 함수로 테스트 해보려고 다음과 같이 유닛을 넣었습니다.
[[ TestFunc.cpp ]]
#include
#pragma hdrstop
#include "TestFunc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
bool ShowMsg(AnsiString sMsg)
{
ShowMessage(sMsg);
return true;
}
다음에 테스트용 프로젝트를 새로 만들어서
"TestFunc.h" 를 인클루드 하고 ShowMsg를 호출해봤습니다.
[[ Main.cpp ]]
#include
#pragma hdrstop
#include "Main.h"
#include "TestFunc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMsg("test");
}
//----
옵션에서 Runtime Package을 껐을때는
아무 문제 없는데...
옵션을 켜고 Runtime Package 내용에 bpl_sub(bpl 파일이름)을 추가하고
하면 ShowMsg를 찾을 수 없다는 링크 에러가 발생합니다.
[[ 테스트 프로젝트 옵션 ]]
[[ 에러 ]]
일반 Dll 만들때는 함수 선언시 __declspec(dllexport) 를 사용하는데..
이것을 선언 안해서 그런것인지 모르겠습니다.
bpl에서도 똑같이 선언해야 하는것인지요?
하지만,,, 그렇게 해도 문제가 있습니다.
그렇게 선언하면 패키지 프로젝트를 빌드 할때
TestFunc.cpp의 ShowMsg 함수안헤서 ShowMessage() VCL 함수 사용한 부분에서 링크에러가 발생하는군요
함수의 소스에서 VCL 관련 부분 건드리면 다 링크 에러가 발생하네요
패키지 프로젝트로 콤포넌트 외에 일반 runtime용 라이브러리(dll 대용)를 만들거나
폼을 포함시키는 용도로 사용하는 방법에 대한 조언 바랍니다.
간단한 샘플 만들어 주시면 더 고맙겠습니다. ^^
|