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를 지정하여 해결하는 방법이 있을까요?
:
: