환경: 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....