우선 답변 감사합니다.
하지만 저도 bpl 프로젝트와 테스트 프로젝트를 다른 폴더에서 테스트 해봤습니다만
동일한 에러가 발생합니다.
혹시 장성호님은 Runtime Package를 체크 안하셨거나
runtime package 리스트에 bpl_sub 를 추가 안하신건 아닌지요?
제대로 된다면 dll 처럼 실행파일 재컴파일 없이 ShowMessage의 내용을
bpl만 다시 컴파일 해서 바꿀수 있어야 하는건데
잘되십니까?
잘되신다면 테스트 프로젝트를 좀 올려주셨으면 합니다.
장성호 님이 쓰신 글 :
: bpl을 별로 만들어 보지 않아서 정확히 설명을 못하겠지만...
:
: 님이 올려주신 package 를 install하여서 test프로그램 돌려 보니까
: 잘 되는데요
:
: 단,
: test프로그램을 bpl 패키지와 같은 폴더가 아니라
: 다른 폴더에 copy해서 컴파일 했습니다.
:
: link할때
:
: 같은 폴더에 xxx.h 파일이 있는경우 bpl에서 함수를 링크하려하기 보다
: 같은 폴더에 xxx.obj 파일을 찾아 링크하려 하는게 우선인지...
:
: 하여간 잘 몰라서 정확히 설명은 못하고 의견만...
:
: 그럼..
:
:
: 크레브 님이 쓰신 글 :
: : 일단 하려고 한 목표는 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 대용)를 만들거나
: : 폼을 포함시키는 용도로 사용하는 방법에 대한 조언 바랍니다.
: : 간단한 샘플 만들어 주시면 더 고맙겠습니다. ^^