SBSimpleSftp.hpp, Sbwincrypt.hpp 파일도 올려 놓았습니다. 제발 해결이 되기를...~~!!
님이 쓰신 글 :
: 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를 지정하여 해결하는 방법이 있을까요?
: :
: :