미스터몽키 9월 8일에 포스트됨 공유하기 9월 8일에 포스트됨 델파이 프로젝트 관리자에 2~3개 프로젝트를 Add하여 사용 중입니다. 생산성을 위해 공통 모듈에 TRESTClient 하나를 놓고 각 폼에서 TRESTRequest 에서 공통모듈 TRESTClient 를 연결하여 사용중입니다. 그런데 두개 서로 다른 프로젝트가 공통모듈 이름이 같은 경우 디자인 타임에 설정한 TRESTClient 가 초기화 될 수 있습니다. 새로 델파이 실행하고 프로젝트를 Add 할때 Add 순서에 따라 다른 프로젝트의 공통모듈을 참조하면서 디자인 타임에 설정한 기존 참조가 초기화될 수있습니다. 예를들어 두 프로젝트가 같은 이름의 공통 모듈 frmPubDm 을 사용할 경우입니다. 프로젝트A - 공통모듈 PubDm.unit (폼명 frmPubDm) RESTClient1 - 사용하는 유닛 Abc.unit (폼명 frmAbc) RESTRequest1, RESTRespone1, DSRestConnection1 ... 디자인타임에 frmAbc 폼의 RESTRequest1 속성 Client 에 frmPubDm.RESTClient1 설정함 프로젝트B - 공통모듈 PubDm.unit (폼명 frmPubDm) RESTClient 유닛없음 델파이 새로 실행하고 프로젝트B 를 프로젝트 관리자 창에 먼저 Add한 상태에서 PubDm 유닛이 오픈되어 있고 여기에 프로젝트A 를 추가 로 Add 하여 두개 프로젝트를 같이 작업하려고 하면 프로젝트A frmAbc 의 RESTRequest1 속성 Client 에 frmPubDm.RESTClient1 정보가 초기화되어 없어집니다. 아마도 A프로젝트가 이미 로드된 B프로젝트의 frmPubDm 을 참조하면서 RESTClient1 이 없기 때문인 것같습니다. 프로젝트A 에 많은 폼들에서 frmPubDm 의 RESTClinet1 을 디자인타임에 참조하고 있는데 해당 폼을 열면 참조가 모두 초기화됩니다. 결국 하드코딩으로 해놔야 안전하단 이야기가 되는데 너무 당황스럽네요 ㅠㅠ 실험해 보니 TRESTClient 만이 아니라 공통모듈에 올려져있는 TImageList 등도 문제가 되는군요 해결방법은 참조하는 공통모듈을 프로젝트마다 이름을 다르게 해야한다는 이야기가 됩니다. 아니면 델파이를 여러개를 실행하고 각각 프로젝트를 하나씩 Add 하여 사용해야한다는 이야기가 되네요. 일단은 불안해서 하드코딩으로 RESTRequest1.Client := frmPubDm.RESTClient1; 변경했습니다. 혹시 다른 방법이 있을까요? 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
0 c2design 9월 11일에 포스트됨 공유하기 9월 11일에 포스트됨 다음 2가지 경우에 해당될 것 같습니다. 1. 델파이를 실행 했을때 처음 화면에 열리는 소스가 등록된 프로젝트의 파일과 같은 이름의 다른경로 파일인 경우. -> 화면의 열린 소스를 모두 닫고 프로젝트 그룹에서 파일을 다시 오픈 2. 프로젝트의 그룹에 있는 하나의 소스가 다른 프로젝트에서 중복되어 같이 포함된경우 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
질문
미스터몽키
델파이 프로젝트 관리자에 2~3개 프로젝트를 Add하여 사용 중입니다.
생산성을 위해 공통 모듈에 TRESTClient 하나를 놓고 각 폼에서 TRESTRequest 에서 공통모듈 TRESTClient 를 연결하여 사용중입니다.
그런데 두개 서로 다른 프로젝트가 공통모듈 이름이 같은 경우 디자인 타임에 설정한 TRESTClient 가 초기화 될 수 있습니다.
새로 델파이 실행하고 프로젝트를 Add 할때 Add 순서에 따라 다른 프로젝트의 공통모듈을 참조하면서 디자인 타임에 설정한 기존 참조가 초기화될 수있습니다.
예를들어 두 프로젝트가 같은 이름의 공통 모듈 frmPubDm 을 사용할 경우입니다.
프로젝트A
- 공통모듈 PubDm.unit (폼명 frmPubDm)
RESTClient1
- 사용하는 유닛 Abc.unit (폼명 frmAbc)
RESTRequest1, RESTRespone1, DSRestConnection1 ...
디자인타임에 frmAbc 폼의 RESTRequest1 속성 Client 에 frmPubDm.RESTClient1 설정함
프로젝트B
- 공통모듈 PubDm.unit (폼명 frmPubDm)
RESTClient 유닛없음
델파이 새로 실행하고 프로젝트B 를 프로젝트 관리자 창에 먼저 Add한 상태에서 PubDm 유닛이 오픈되어 있고
여기에 프로젝트A 를 추가 로 Add 하여 두개 프로젝트를 같이 작업하려고 하면
프로젝트A frmAbc 의 RESTRequest1 속성 Client 에 frmPubDm.RESTClient1 정보가 초기화되어 없어집니다.
아마도 A프로젝트가 이미 로드된 B프로젝트의 frmPubDm 을 참조하면서 RESTClient1 이 없기 때문인 것같습니다.
프로젝트A 에 많은 폼들에서 frmPubDm 의 RESTClinet1 을 디자인타임에 참조하고 있는데 해당 폼을 열면 참조가 모두 초기화됩니다.
결국 하드코딩으로 해놔야 안전하단 이야기가 되는데 너무 당황스럽네요 ㅠㅠ
실험해 보니 TRESTClient 만이 아니라 공통모듈에 올려져있는 TImageList 등도 문제가 되는군요
해결방법은 참조하는 공통모듈을 프로젝트마다 이름을 다르게 해야한다는 이야기가 됩니다.
아니면 델파이를 여러개를 실행하고 각각 프로젝트를 하나씩 Add 하여 사용해야한다는 이야기가 되네요.
일단은 불안해서 하드코딩으로
RESTRequest1.Client := frmPubDm.RESTClient1;
변경했습니다.
혹시 다른 방법이 있을까요?
이 댓글 링크
다른 사이트에 공유하기
1 answer to this question
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.