단단한돌 님이 쓰신 글 :
: 환경: C++ Builder XE5
:
: CERT_NAME_BLOB가 양쪽에서 정의되어 있는데 모호하다.
: 에러의 내용은 알겠는데.. 어떻게 해결해 할 지 모르겠네요.
:
: $Embarcadero_HOME\include\windows\sdk\mprapi.h
: $SecureBlackBox_HOME\Sbwincrypt.hpp
:
: 두 해더 간의 Conflict이고, 개발한 코드에는 CERT_NAME_BLOB은 사용되지 않았습니다.
: mprapi.h는 namespace 에 대한 코드도 없네요.
:
: 이러한 경우 어떻게 해야 할 지요?
:
:
: //wincrypt.h
: typedef struct _CRYPTOAPI_BLOB {
: DWORD cbData;
: __field_bcount(cbData) BYTE *pbData;
: } CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
: CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB,
: CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
: CERT_NAME_BLOB, *PCERT_NAME_BLOB, // 정의됨
:
: // mprapi.h
: typedef struct _IKEV2_TUNNEL_CONFIG_PARAMS {
: //some code ....
: CERT_NAME_BLOB * certificateNames; // 사용됨.
: }IKEV2_TUNNEL_CONFIG_PARAMS, *PIKEV2_TUNNEL_CONFIG_PARAMS;
:
: //Sbwincrypt.hpp
: typedef CRYPTOAPI_BLOB CERT_NAME_BLOB; // CERT_NAME_BLOB conflict
:
:
: wincrypt.h에서 정의되고 mprapi.h에서 사용되었는데,
: Sbwincrypt.hpp에서 다시 정의되어 컴파일러가 모호하다는 메세지...
:
: mprapi.h을 include한 소스는 GuardnetThread.cpp
: Sbwincrypt.hpp을 include한 소스는 UnitMain.cpp
:
: UnitMain.cpp는 GuardnetThread.h을 include하고,
: GuardnetThread.cpp는 UnitMain.h를 include합니다.
: #ifndef ... #pragma hdrstop 한번만 로드되게, 프리 컴파일되게 등 헤더 Include되는 위치를 이리저리 옮겨도
: 안되네요.. 어찌 해결해야 할 지... ?
:
: 고수님들의 지도를 바랍니다.
: 감사합니다.
:
: 아래는 컴파일러의 에러 메세지...
:
: // 컴파일 에러 내용..
: [bcc32 Error] mprapi.h(1273): E2015 Ambiguity between 'CERT_NAME_BLOB' and 'Sbwincrypt::CERT_NAME_BLOB'
: Full parser context
: GuardnetThread.cpp(14): #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
:
:
:
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_faq&no=37
:
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=4881
:
: 두 개의 링크에서 확인해 보았는데.. 도움이 .. ㅠ.ㅠ;;
: 소스 코드에서는 Conflict된 이름을 사용하지 않습니다. 고친다면 Header 파일을 고쳐야 하는 지?....
:
:
: //GuardnetThread.cpp => Guardnet Thread
: //---------------------------------------------------------------------------
: #include
: #pragma hdrstop
:
: #include "GuardnetThread.h"
: #include "UnitMain.h"
: // ... some header include
:
: #pragma package(smart_init)
: #include // => 문제의 Header file include됨
: #pragma comment(lib, "iphlpapi.lib")
:
:
: // UnitMain.cpp // MainForm
: //---------------------------------------------------------------------------
: #include
: #pragma hdrstop
:
: #include "UnitMain.h"
: #include "GuardnetThread.h"
: // ... some header include
:
:
: 고수님.. Help....
:
:
답변:
프로젝트 전체 파일을 업로드 하지 않고 질문에 언급되어 있는 내용만으로는
디펜던시 관계를 확정할 수 없습니다.