자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi BPL로 만들어진 라이브러리 참조관련
2019.08.16 11:14
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
BPL로 만들어진 공통화면을 여러 BPL 화면에서 참조하여 사용하고있습니다.
(※ 패키지의 Requires에도 등록해놨음)
interface의 uses절에 공통화면BPL을 선언하고 implementation의 uses절에 해당 공통화면을 선언한뒤
특정 버튼 이벤트에
begin
Application.CreateForm(TTempForm, TempForm);
if ed_Tnm.Text <> '' then // ( 1* )
begin
TempForm.ed_Tname.Text := ed_Tnm.Text;
TempForm.bbt_select.Click;
end;
TempForm.ShowModal;
ed_Tno.Text := TempForm.Tno;
ed_Tnm.Text := TempForm.Tname;
end;
위와같이 사용하고있습니다.
문제는 공통화면을 수정해서 반영하면 오류가 발생합니다.
(※ Access violation at address 50106A63 in module 'rtl160.bpl'. Read of address 0AF50000.)
여기서 수정이라하면 기존에 있던 label을 제거한다거나 이런것들입니다.
기본적으로는 오류가 발생하지 않으나 1* 조건이 True일경우 오류가 납니다. 그 외에도 공통화면.BPL의 수정되지 않은 pas파일의 함수 사용시에도 발생합니다.
일반화면.BPL 을 컴파일하고 이후 공통화면.BPL 을 수정을 하더라도 문제가 없을거라 생각했었는데
그렇지 않았나봅니다.
일반화면.BPL을 컴파일할때 공통화면.BPL의 호출되는 주소값(?)을 가지는거같고, 공통화면.BPL이 변경이되면 그 주소값(?)이 틀어지니까 일반화면에서 수정된 공통화면.BPL을 호출할때 위와같은 오류가 발생한듯합니다.
공통화면.BPL 수정 후 일반화면.BPL을 다시 컴파일하면 정상동작하는것같습니다. 하지만 공통화면.BPL을 매번 수정때마다 사용하는 일반화면.BPL들을 다시 컴파일하자니 문제가 될듯싶습니다.
위와같은 BPL간의 라이브러리의 참조? 선언? 호출하는 구조? 에 대해서 정확히 이해가 안된상태다보니 짐작만 하게되는데.. 이부분에 대해서 도움받을 수 있을까싶어서 질문남깁니다
Delphi BPL로 만들어진 라이브러리 참조관련
2019.08.16 11:14
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
BPL로 만들어진 공통화면을 여러 BPL 화면에서 참조하여 사용하고있습니다.
(※ 패키지의 Requires에도 등록해놨음)
interface의 uses절에 공통화면BPL을 선언하고 implementation의 uses절에 해당 공통화면을 선언한뒤
특정 버튼 이벤트에
begin
Application.CreateForm(TTempForm, TempForm);
if ed_Tnm.Text <> '' then // ( 1* )
begin
TempForm.ed_Tname.Text := ed_Tnm.Text;
TempForm.bbt_select.Click;
end;
TempForm.ShowModal;
ed_Tno.Text := TempForm.Tno;
ed_Tnm.Text := TempForm.Tname;
end;
위와같이 사용하고있습니다.
문제는 공통화면을 수정해서 반영하면 오류가 발생합니다.
(※ Access violation at address 50106A63 in module 'rtl160.bpl'. Read of address 0AF50000.)
여기서 수정이라하면 기존에 있던 label을 제거한다거나 이런것들입니다.
기본적으로는 오류가 발생하지 않으나 1* 조건이 True일경우 오류가 납니다. 그 외에도 공통화면.BPL의 수정되지 않은 pas파일의 함수 사용시에도 발생합니다.
일반화면.BPL 을 컴파일하고 이후 공통화면.BPL 을 수정을 하더라도 문제가 없을거라 생각했었는데
그렇지 않았나봅니다.
일반화면.BPL을 컴파일할때 공통화면.BPL의 호출되는 주소값(?)을 가지는거같고, 공통화면.BPL이 변경이되면 그 주소값(?)이 틀어지니까 일반화면에서 수정된 공통화면.BPL을 호출할때 위와같은 오류가 발생한듯합니다.
공통화면.BPL 수정 후 일반화면.BPL을 다시 컴파일하면 정상동작하는것같습니다. 하지만 공통화면.BPL을 매번 수정때마다 사용하는 일반화면.BPL들을 다시 컴파일하자니 문제가 될듯싶습니다.
위와같은 BPL간의 라이브러리의 참조? 선언? 호출하는 구조? 에 대해서 정확히 이해가 안된상태다보니 짐작만 하게되는데.. 이부분에 대해서 도움받을 수 있을까싶어서 질문남깁니다
http://tech.devgear.co.kr/delphi_news/8247
내용중에
"유닛의 인터페이스 섹션을 변경할 경우 이 유닛에 종속된 다른 유닛도 반드시 다시 컴파일