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
[74681] 자답... Re:혹시 이렇게 하는 방법은?
단단한돌 [heaven2] 3557 읽음    2017-11-28 12:08
해결은 했는데.. 좀 다른 양상으로 해결했습니다.

#include <vcl.h>
#include <Vcl.Imaging.jpeg.hpp>
#include <Vcl.Imaging.pngimage.hpp>  // vcl compoent를 중복으로 include 하는 것은 Sftp을 include하고
                                 // unitmain.h를 Include할 때 VCL component와 다시 충돌하기 때문에 이렇게 함
                               
#include "SBSimpleSftp.hpp"       // 반드시 여기에 쓸 것 (include UnitMain.h 하기 전에 쓸 것)

#include "UnitMain.h"
#include "FtpThread.h"

SBSimpleSftp.hpp를 UnitMain.h보다 먼저 쓸 수 밖에 없는 상황입니다. ( Header file dependency 때문에)
그런데. xxx.hpp파일의 내용이 UnitMain.h파일에서 include 하는 VCL 계열 함수와 또 Conflict 되는 상황이 생겨서,
Conflict되는 소스를 xxx.hpp파일에 먼저 써버려서 Conflict를 해소해 버리는 트릭이라면 트릭을 사용하였습니다.
어쟀거나 이런 간단한 방법으로 2주간의 삽질이 끝나네요..

이런 상황을 맞으시는 다른 분들에게도 가호가 있기를...


단단한돌 님이 쓰신 글 :
: GuardnetThread.cpp에서 UnitMain.h을 Include하는 것은
: MainForm의 포인터인 frmMain 변수를 받아오기 위함입니다. MainForm에 접근하기 위해서..
:
:
/////////////////////////////////////
: // UnitMain.h
: #include 
: ..
: class TfrmMain : public TForm
: {
: ...
: };
: extern PACKAGE TfrmMain *frmMain;   // 이 포인터를 받아오기 위해서임. 

:
: UnitMain.h 파일을 include하지 않고, TfrmMain *frmMain을 Reference할 수 있는 방법이 있을까요?
:
:
: 단단한돌 님이 쓰신 글 :
: : Component간 Conflict가 발생해서 며칠째 개고생 중입니다.
: : 파일들을 따라가 보니 하나의 헤더 파일을 제외하면 성공할 것 같은데요..
: :
: :
/////////////////////////////////////
: : // UnitMain.h
: : #include 
: : #include "SBSimpleSftp.hpp"   // GuardnetThread.cpp에서 include에서 제외해하하는 파일
: : ..
: : 
: : /////////////////////////////////////
: : // GuardnetThread.cpp 
: : #include "GuardnetThread.h"
: : #include "UnitMain.h"               // UnitMain.h을 include함. => Conflict 발생..  
: : #include 		// Routing 정보
: : #pragma comment(lib, "iphlpapi.lib")

: :
: : GuardnetThread.cpp에서 UnitMain.h 파일을 include하는데,
: : UnitMain.h파일의 "SBSimpleSftp.hpp" 파일과 GuardnetThread.cpp에서 include한
: : <iphlpapi.h>파일이 Conflict가 발생합니다.
: :
: : 보통 Header file의 Dependency 때문에 문제가 발생하면,
: : Include 순서를 바꾸거나, Build Order를 조정해서 해결하는데..
: : 두 파일의 include 순서를 바꾸거나, Build Order를 바꿔도 마찬가지거나,
: : 또다른 엄청난 Compile Error를 만들어 냅니다.
: :
: : 최종적으로 찾아낸 것이 <<iphlpapi.h>과 "SBSimpleSftp.hpp" 가 서로 충돌하는 상황입니다.
: : GuardnetThread.cpp 에서 UnitMain.h를 Include할 때 "SBSimpleSftp.hpp" 파일만 include에서
: : 제외하고 싶습니다. 그러면, 이 지난했던 문제가 해결될 것 같습니다.
: :
: : 결론적으로,
: : 어떤 소스 파일(GuardnetThread.cpp)을 컴파일하면서,
: : 이 파일이 Include 하는 파일(UnitMain.h)에서 특정 include file("SBSimpleSftp.hpp")만 Include를 제외시키고
: : 싶습니다.
: :
: : 이런 것이 가능할까요?
: :
: : #pragma syntax을 뒤져봤는데.. 흔히 쓰는 hdrstop, comment, link 정도는 알겠는데..
: : 다른 옵션들은 도통 이해가 가지 않네요.
: :
: : Incldue 하면서 특정 파일만 include에서 제외하는 것이 가능할까요?
: :
: : 아래는 Error Text입니다.
: :
: :
[bcc32 Error] mprapi.h(1273): E2015 Ambiguity between 'CERT_NAME_BLOB' and 'Sbwincrypt::CERT_NAME_BLOB'
: :   Full parser context
: :     GuardnetThread.cpp(16): #include c:\program files (x86)\embarcadero\rad studio\12.0\include\windows\sdk\iphlpapi.h
: :     iphlpapi.h(34): #include c:\program files (x86)\embarcadero\rad studio\12.0\include\windows\sdk\iprtrmib.h
: :     iprtrmib.h(38): #include c:\program files (x86)\embarcadero\rad studio\12.0\include\windows\sdk\mprapi.h
: :     mprapi.h(1266): class _IKEV2_TUNNEL_CONFIG_PARAMS
: : [bcc32 Error] mprapi.h(1309): E2015 Ambiguity between 'CRYPT_HASH_BLOB' and 'Sbwincrypt::CRYPT_HASH_BLOB'
: :   Full parser context
: :     GuardnetThread.cpp(16): #include c:\program files (x86)\embarcadero\rad studio\12.0\include\windows\sdk\iphlpapi.h
: :     iphlpapi.h(34): #include c:\program files (x86)\embarcadero\rad studio\12.0\include\windows\sdk\iprtrmib.h
: :     iprtrmib.h(38): #include c:\program files (x86)\embarcadero\rad studio\12.0\include\windows\sdk\mprapi.h
: :     mprapi.h(1306): class _SSTP_CERT_INFO

: :
: : 고수님들의 도움을...~~!!
: : 감사합니다.~!!
: :
: :
: :

+ -

관련 글 리스트
74674 [질문] include 되는 header file의 일부분을 include 에서 제외할 수 있나요? 단단한돌 3369 2017/11/23
74679     Re:[질문] include 되는 header file의 일부분을 include 에서 제외할 수 있나요? 빌더(TWx) 3801 2017/11/27
74680         감사~감사~감사~!! 해결~!! 단단한돌 3627 2017/11/28
74675     혹시 이렇게 하는 방법은? 단단한돌 3371 2017/11/23
74681         자답... Re:혹시 이렇게 하는 방법은? 단단한돌 3557 2017/11/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.