아라비안와인 1월 20일, 2022에 포스트됨 공유하기 1월 20일, 2022에 포스트됨 DevExpress 와 Devart 컴포넌트에서 "MSAccess" 명칭이 동일하여 참조 오류가 발생하고 있습니다. 이와 관련하여 참조 Class를 정확하게 추적하도록 컴포넌트(또는 Bpl)를 명시할 수 있을까요? 개발 환경 - Embarcadero® RAD Studio 11.0 Version 28.0.42600.6491 - DevExpressVCLProducts-21.2.2 - sdac_10.0.2 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
0 아라비안와인 1월 20일, 2022에 포스트됨 Author 공유하기 1월 20일, 2022에 포스트됨 해결됨 ---- Devart사의 sdac 제품군 내의 TMSConnnection 컴포넌트는 MSAccess Unit를 참조하도록 설계되었고, DevExpress사의 DevExpressVCL 제품군 내의 일부 컴포넌트는 dxEMF.DB.MSAccess Unit을 참조하도록 설계된 것으로 보입니다. 개발과정에서 2개사의 컴포넌트가 혼재되어 사용되었으며, 실제 DevExpress사의 어떤 컴포넌트가 문제를 발생하는지는 찾지 못했습니다. 기존 10.4 버전에서 개발된 소스에서는 참조 대상의 모호성에도 불구하고, 정상 컴파일 되었습니다. 11 버전에서 컴파일시에는 첨부파일과 같은 오류가 발생합니다. 위 문제는 프로젝트 파일의 옵션내 Unit Scope Name을 정비하여 문제를 해결하였습니다. 관심 가져 주셔서 감사합니다. 2 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
0 험프리 1월 20일, 2022에 포스트됨 공유하기 1월 20일, 2022에 포스트됨 어떤 오류가 어떻게 발생하는지 메시지와 스크린샷을 첨부해 주시겠어요? -- 일반적으로 컴포넌트도 클래스이므로, 클래스 이름이 중복되는 경우 유닛명.클래스명으로 사용할 수 있습니다. 예를 들어, TButton의 경우 Vcl.StdCtrls에 선언되어 있고, 다음과 같이 사용 가능합니다. Button1: Vcl.StdCtrls.TButton; 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
0 Kori 1월 23일, 2022에 포스트됨 공유하기 1월 23일, 2022에 포스트됨 On 2022. 1. 21. at 오전 11시 44분, 아라비안와인 said: 해결됨: 아래 문제는 프로젝트 파일의 옵션내 Unit Scope Name을 정비하여 문제를 해결하였습니다. 스스로 해결하고 방법까지 남겨주셔서 감사합니다. @아라비안와인님께서는 이미 알고 있겠지만, 이 글을 보는 다른 분들을 위해 참고로 부연 설명을 남깁니다. [써드 파티 프레임워크와 네임스페이스] DevExpress 등 써드 파티 프레임워크 제조사는 대체로 Unit의 이름을 정할 때, Namespace를 사용하여 제조사 또는 제품을 알 수 있고 유닛을 정돈하기 좋은 이름을 만든다. 유닛 예: dxEMF.DB.MSAccess (데브익스프레스 사의 유닛이고 데이터베이스 관련된 유닛임을 알 수 있다. 타입 예: dxEMF.DB.MSAccess.TMSConnection (아래 "코드 예시" 처럼 전체이름을 쓰는 경우는 많지 않다. 하지만, 유닛과 네임스페이스는 타입을 잘 사용하면 타입을 정돈하고 명확히 할 수 있어서 좋다) [델파이 네임스페이스와 클래스] 델파이와 10.4와 11.0은 모두 namespace를 지원한다. 델파이 Unit은 델파이 Type을 담는 컨테이너이다. 델파이 Namespace는 델파이 Unit을 담는 컨테이너 이다. (예: Vcl.Touch.GestureMgr) 델파이 Class는 델파이 Type중 하나이다. 델파이 Class의 전체 클래스명은 네임스페이스가 포함된 이름이다. (예: Vcl.Touch.GestureMgr.TGestureManager) 델파이 소스에서 사용되는 클래스가 정확히 무엇인지 컴파일러가 알 수 있어야 한다. (우리가 윈도우 탐색기에서 특정 파일을 한번에 찾을 때, 주소 창에 폴더 위치까지 포함하여 전체 파일명을 지정하는 것과 같은 방식이다) [코드 예시] TGestureManager 클래스가 들어있는 유닛 파일 (참고, 델파이는 델파이로 만든다. 델파이 상업용 버전에는 코드도 함께 제공된다. 이 코드를 보면 개발 능력 향상에도 도움이 된다.) unit Vcl.Touch.GestureMgr; // (네임스페이스는 유닛을 담는 컨테이너이다) // 유닛명에서 네임스페이스를 사용했다. // 그 결과, 여러 유닛을 정돈된 네임스페이스 계층에 넣을 수 있다. ... type TGestureManager = class; // (유닛은 타입을 담는 컨테이너이다) // Vcl.Touch.GestureMgr 유닛 안에서 "TGestureManager" 클래스 타입을 선언했다. // 그 결과, 이 클래스의 전체 이름은 Vcl.Touch.GestureMgr.TGestureManager 이다. ... // 이 유닛 안에 정의된 타입은 모두가 Vcl.Touch.GestureMg 안에 들어있게 된다. TGestureManager 클래스를 사용하는 유닛 파일 unit uMain; ... uses ... Vcl.Touch.GestureMgr; // 유즈 절에 사용할 유닛명을 넣는다. (네임스페이스를 포함한 전체이름을 넣으면 좋다) TMainForm = class(TForm) ... GestureManager1: TGestureManager; // 앞에서 유닛명이 지정되었으므로 유닛명을 굳이 적지 않아도 된다. // (흔하지 않겠지만) 만약 유즈절에 들어있는 유닛 중에 TGestureManager라는 클래스를 가지고 있는 유닛이 // Vcl.Touch.GestureMgr 말고 또 있다면, 위와 같이 TGestureManager라는만 적을 경우, 컴파일러는 정확히 알 수 없다. // 따라서 Vcl.Touch.GestureMgr.TGestureManager 로 전체이름을 적어야 한다. 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
질문
아라비안와인
DevExpress 와 Devart 컴포넌트에서 "MSAccess" 명칭이 동일하여 참조 오류가 발생하고 있습니다.
이와 관련하여 참조 Class를 정확하게 추적하도록 컴포넌트(또는 Bpl)를 명시할 수 있을까요?
개발 환경
- Embarcadero® RAD Studio 11.0 Version 28.0.42600.6491
- DevExpressVCLProducts-21.2.2
- sdac_10.0.2
이 댓글 링크
다른 사이트에 공유하기
3 answers to this question
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.