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

C++빌더 Q&A
C++Builder Programming Q&A
[54770] Re:Re:Re:bpl(runtime package)에 만든 함수 사용하기 에러
장성호 [nasilso] 1113 읽음    2008-10-06 12:37
build withd runtime package  에 bpl_sub를 포함하지 않고 테스트를 했었네요..

새로운 package(xxx.bpk) 를 만들어서 Testfunc2.pas 파일을 add해서 테스트 해봤습니다.

1. xxx.bpk를 install한후에
2. test.exe의 옵션 build withd runtime package  에  xxx 를 포함하고
3. 컴파일 및 실행하니  잘되더라구요

그래서 xxx패키지의 test.hpp 파일을 열어서 확인해 보니 ...

기존에 TestFunc.h와 다른것이 있다면

1. namespace 가 선언되어있었구
2. 또하나 extern으로 함수선언하는 부분에서 PACKAGE라는 옵션이 추가되어 있네요

아래처럼

namespace Testfunc2
{
//-- type declarations -------------------------------------------------------
//-- var, const, procedure ---------------------------------------------------
extern PACKAGE bool __fastcall ShowMsg2(AnsiString s);

}	/* namespace Testfunc2 */
using namespace Testfunc2;




namespace가 상관있는 줄았알는데...
namespace는 상관이 없고 PACKAGE라는것이 상관이 있네요

extern하고 함수 선언할때 PACKAGE 라는것을 추가하면 문제가 해결되는네요

extern PACKAGE bool __fastcall ShowMsg2(AnsiString s);



다시 bpl을 수정한뒤에

test.exe를 탐색기에서 바로 실행해도 수정된 것이 적용되었습니다.


그럼..


크레브 님이 쓰신 글 :
: 우선 답변 감사합니다.
: 하지만 저도 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 대용)를 만들거나
: : : 폼을 포함시키는 용도로 사용하는 방법에 대한 조언 바랍니다.
: : : 간단한 샘플 만들어 주시면 더 고맙겠습니다. ^^

+ -

관련 글 리스트
54761 bpl(runtime package)에 만든 함수 사용하기 에러 크레브 1168 2008/10/05
54762     Re:bpl(runtime package)에 만든 함수 사용하기 에러 장성호 1225 2008/10/06
54764         Re:Re:bpl(runtime package)에 만든 함수 사용하기 에러 크레브 1295 2008/10/06
54770             Re:Re:Re:bpl(runtime package)에 만든 함수 사용하기 에러 장성호 1113 2008/10/06
54772                 Re:Re:Re:Re:bpl(runtime package)에 만든 함수 사용하기 에러 크레브 1117 2008/10/06
54773                     Re:Re:Re:Re:Re:bpl(runtime package)에 만든 함수 사용하기 에러 장성호 1158 2008/10/06
54774                         Re:Re:Re:Re:Re:Re:bpl(runtime package)에 만든 함수 사용하기 에러 망치 1456 2008/10/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.