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
[74659] [질문] E2015 Ambiguity between 'CERT_NAME_BLOB' and 'Sbwincrypt::CERT_NAME_BLOB'
단단한돌 [heaven2] 3382 읽음    2017-11-16 16:59
환경: 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....


+ -

관련 글 리스트
74659 [질문] E2015 Ambiguity between 'CERT_NAME_BLOB' and 'Sbwincrypt::CERT_NAME_BLOB' 단단한돌 3382 2017/11/16
74663     Re: E2015 Ambiguity between 'CERT_NAME_BLOB' and 'Sbwincrypt::CERT_NAME_BLOB' 빌더(TWx) 3382 2017/11/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.