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
[74672] Re:[질문] E2015 Ambiguity between 'CERT_NAME_BLOB' and 'Sbwincrypt::CERT_NAME_BLOB' 다시 정리..
[] 3635 읽음    2017-11-23 15:12
Sbwincrypt.hpp 파일도 업로드 해야할 듯 한데요


단단한돌 님이 쓰신 글 :
: 환경: C++ Builder XE5
:
: 사용 Component:
:   - UI Component   : Button, Panel, TImage, TListView,.... 화면 UI Component들..
:   - Indy Compnent  : IndyFTP, IndyTCPServer, IndyTCPClient
:   - SFTP Component : SecureBlackBox SFTP Component (상용)
:
: 기존의 프로젝트에 SFTP(SecureFTP) 기능이 필요하여 SecureBlackBox라는 Component를 추가하였습니다.
: 추가한 Compnent가 기존 프로텍트의 Library와 여기저기 충돌을 일으켜서 다량의 Compile Error를 만들어 냅니다.
: Build Order와 Include 순서를 조정해서 Compile Error를 잡았는데, 이것 하나만은 끈질기게 해결이 되지 않고 있습니다.
:
: 에러 메세지를 보면 CERT_NAME_BLOB 라는 이름이 SecureBlackBox Component(SbwinCrypt.hpp)에서 정의되고,
: Windows SDK의 Header 파일인 <iphjlpapi.h>에서도 정의되어 사용되고 있습니다.
: <iphlpapi.h> 파일은 시스템의 라우팅 정보를 가져오는 함수들이 정의되어 있습니다.
: 이 두개의 Header 모두 프로그램 운영에는 필요한 상태입니다.
:
: 에러를 보면 GardnetThread.cpp의 컴파일 과정에서 <iphlpapi.h>을 include 하기 전에,
: "UnitMain.h"를 Include하게 되는데, 그 안에서 "SBSimpleSftp.hpp"를 include 하게 되고,
: "SBSimpleSftp.hpp"의 include를 따라 가서 "Sbwincrypt.hpp"까지 include하게 되는데,
: "Sbwincrypt.hpp"의 내용이 <iphlpapi.h>에서 include하는 <mprapi.h>의 선언부와 충돌됩니다.
:
: 'CERT_NAME_BLOB','CRYPT_HASH_BLOB' 이 두 개의 이름이 중복된다는 결론입니다.
:
: 이 두개의 include 순서를 뒤바꾸면, 더 엄청난 Compile error가 튀어 나옵니다.
:
: 충돌을 회피할 수 있는 방법은 어떤 것이 있을까요?
:
: 2주째 이 문제로 씨름 중입니다. Help~~~~!!
:
: [부언 설명]
: GardnetThread.cpp -----------> UnitMain.h ------------->SBSimpleSftp.hpp
: (iphlpapi.h include)                                    (Sbwincrypt.hpp include)
:
: - <iphlpapi.h> --> include --> <mprapi.h>
: - <SBSimpleSftp.hpp> --> include --> <Sbwincrypt.hpp> 두 개의 파일에서 충돌..
:
:
: //------------------------------------------------------------------------
: // compile error 내용 
: [bcc32 Error] mprapi.h(1273): E2015 Ambiguity between 'CERT_NAME_BLOB' and 'Sbwincrypt::CERT_NAME_BLOB'
:   Full parser context
:     GuardnetThread.cpp(13): #include c:\program files (x86)\embarcadero\rad studio\12.0\include\windows\sdk\iphlpapi.h   // 이  Header 파일이 문제를 발생
:     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(13): #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
: 
: //------------------------------------------------------------------------
: // 파일의 내용
: $Embacadero_HOME\rad studio\12.0\include\windows\sdk\mprapi.h
: ..
: typedef struct _IKEV2_TUNNEL_CONFIG_PARAMS {
:     DWORD                       dwIdleTimeout;
:     DWORD                       dwNetworkBlackoutTime;
:     DWORD                       dwSaLifeTime;
:     DWORD                       dwSaDataSizeForRenegotiation;
:     DWORD                       dwConfigOptions;
:     DWORD 	                dwTotalCertificates;
:     CERT_NAME_BLOB *            certificateNames;           // conflict 발생, 정의는 그전에 있음. 
: }IKEV2_TUNNEL_CONFIG_PARAMS, *PIKEV2_TUNNEL_CONFIG_PARAMS;
: 
: 
: //------------------------------------------------------------------------
: //  파일의 내용 
: $SecureBlackBox_HOME\Units\CBuilderXE5\SbwinCrypt.hpp
: 
: ...
: typedef CRYPTOAPI_BLOB CERT_NAME_BLOB;     // Conflict 발생 
: typedef CRYPTOAPI_BLOB *PCERT_NAME_BLOB;
: ...
: 
: //=======================================================================
: //  include 관계
: #include 
: #pragma hdrstop
: 
: #include "GuardnetThread.h"
: #include "UnitMain.h"        // UnitMain.h에서  SecureBlackBox SFTP Component include함. 
: #include "LockeCommon.h"
: #include "Env.h"
: #include "Thrdqueue.h"
: 
: #include         // conflict 발생.. 
: #pragma comment(lib, "iphlpapi.lib")
: #pragma package(smart_init)
: 
: TGuardnetThread *thrdGuardnet;
: ...
: 
: //=======================================================================
: // UnitMain.h 파일의 include 관계
: #ifndef UnitMainH
: #define UnitMainH
: 
: #include 
: #include 
: #include 
: #include 
: ...// VCL Library Header 
: 
: #include "SBSimpleSftp.hpp"     // SecureBlackBox SFTP Component include
:                                 // Indy Component 뒤에서 Include 하면 또다른 compile error 
: #include 
: #include 
: #include 
: #include 
: ...//Indy Library Header
: #include 
: ...// DBExpress Header 
: 
: #include "AdPort.hpp"
: #include "OoMisc.hpp"
: ...// other header include
: 

:
: namespace를 지정하여 해결하는 방법이 있을까요?
:
:

+ -

관련 글 리스트
74671 [질문] E2015 Ambiguity between 'CERT_NAME_BLOB' and 'Sbwincrypt::CERT_NAME_BLOB' 다시 정리.. 단단한돌 3423 2017/11/22
74672     Re:[질문] E2015 Ambiguity between 'CERT_NAME_BLOB' and 'Sbwincrypt::CERT_NAME_BLOB' 다시 정리.. 3635 2017/11/23
74673         SBSimpleSftp.hpp, Sbwincrypt.hpp 파일도 올려 놓았습니다. 제발 해결이 되기를...~~!! 단단한돌 3392 2017/11/23
74676             Re:SBSimpleSftp.hpp, Sbwincrypt.hpp 파일도 올려 놓았습니다. 제발 해결이 되기를...~~!! 3418 2017/11/24
74677                 다시 올려 놓았습니다. 감사합니다.~! 단단한돌 3666 2017/11/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.