TEUS.me

 
 

 

7. 수정 #3

다음 수정들은 좀 지저분하다.

NetworkConfigMonitor.h 파일에서 다음과 같은 부분을 찾는다.

virtual void add_interface(const NetworkInterface& interface)
{
  NetworkInterface::AddressSet addresses = interface.get_addresses();
  for (NetworkInterface::AddressSet::const_iterator pos = addresses.begin(), limit = addresses.end();
  pos != limit; ++pos) {
    add_address(interface, *pos);
  }
}

virtual void remove_interface(const NetworkInterface& interface)
{
  NetworkInterface::AddressSet addresses = interface.get_addresses();
  for (NetworkInterface::AddressSet::const_iterator pos = addresses.begin(), limit = addresses.end();
    pos != limit; ++pos) {
    remove_address(interface, *pos);
  }
}

 

비주얼 스튜디오에선 interface가 이미 다른 내용으로 선언되어 있어 컴파일이 되지 않는다.

표시된 부분의 interface를 nic 등의 다른 이름으로 대체한다.

 

같은 작업을 다음 파일들에 대해 동일하게 수행한다.

GuidGenerator.h, Spdp.h, RtpsUdpDataLink.h

 

8. 수정 #4

DCPSInfo_i.cpp 파일에서 다음 부분을 찾는다.

if (this->dispatchingOrb_->work_pending())
{
  // Ten microseconds
  ACE_Time_Value small(0,10);
  this->dispatchingOrb_->perform_work(small);
}

 

비주얼 스튜디오에선 small이 이미 선언되어 있기 때문에 컴파일이 실패하는 것이다.

여기서 small을 smallval 등의 다른 이름으로 대체한다.

 

9. 수정 #5

Parser.cpp 파일을 찾는다. 이 파일은 동일한 파일명이 두 개 있으니 주의해야 한다.

찾아야 할 파일의 위치는 dds\FACE\config\Parser.cpp

여기엔 wchar_t(정확히는 ACE_TCHAR) 관련한 문제가 남아있다.

char*ACE_TCHAR*가 잘못 섞여서 사용되었다.

 

아래의 내용을 찾아서...

int status = import.import_config(filename);

 

다음과 같이 수정한다.

int status = import.import_config(ACE_TEXT_CHAR_TO_TCHAR(filename));

 

또, 아래의 내용을 찾아서...

status = TheServiceParticipant->load_configuration(config,
  filename);

 

다음과 같이 수정한다.

status = TheServiceParticipant->load_configuration(config,
  ACE_TEXT_CHAR_TO_TCHAR(filename));

 

또, 아래의 내용을 찾아서...

status = status || topic.set(value_name.c_str(), value.c_str());

 

다음과 같이 수정한다.

status = status || topic.set(ACE_TEXT_ALWAYS_CHAR(value_name.c_str()), ACE_TEXT_ALWAYS_CHAR(value.c_str()));

 

또, 아래의 내용을 찾아서...

status = status || connection.set(value_name.c_str(), value.c_str());

 

다음과 같이 수정한다.

status = status || connection.set(ACE_TEXT_ALWAYS_CHAR(value_name.c_str()), ACE_TEXT_ALWAYS_CHAR(value.c_str()));

 

또, 아래의 내용을 찾아서...

if (config.open_section(config.root_section(),
  section_type,
  0, // don't create if missing
  key) != 0) {

 

다음과 같이 수정한다.

if (config.open_section(config.root_section(),
  ACE_TEXT_CHAR_TO_TCHAR(section_type),
  0, // don't create if missing
  key) != 0)

 

마지막으로 아래의 내용을 찾아서...

if (std::strcmp(section_type, CONNECTION_SECTION) == 0) {
  status = parse_connection(config, subkey, section_name.c_str());
} else if (std::strcmp(section_type, TOPIC_SECTION) == 0) {
  status = parse_topic(config, subkey, section_name.c_str());
} else if (std::strcmp(section_type, DATAWRITER_QOS_SECTION) == 0) {
  status = parse_qos(
    config, subkey, section_name.c_str(), QosSettings::datawriter);
} else if (std::strcmp(section_type, DATAREADER_QOS_SECTION) == 0) {
  status = parse_qos(
    config, subkey, section_name.c_str(), QosSettings::datareader);
} else if (std::strcmp(section_type, PUBLISHER_QOS_SECTION) == 0) {
  status = parse_qos(
    config, subkey, section_name.c_str(), QosSettings::publisher);
} else if (std::strcmp(section_type, SUBSCRIBER_QOS_SECTION) == 0) {
  status = parse_qos(
    config, subkey, section_name.c_str(), QosSettings::subscriber);
} else {
  ACE_ERROR((LM_ERROR, ACE_TEXT("unknown section %C\n"), section_type));
}

 

아래와 같이 수정한다.

if (std::strcmp(section_type, CONNECTION_SECTION) == 0) {
  status = parse_connection(config, subkey, ACE_TEXT_ALWAYS_CHAR(section_name.c_str()));
} else if (std::strcmp(section_type, TOPIC_SECTION) == 0) {
  status = parse_topic(config, subkey, ACE_TEXT_ALWAYS_CHAR(section_name.c_str()));
} else if (std::strcmp(section_type, DATAWRITER_QOS_SECTION) == 0) {
  status = parse_qos(
    config, subkey, ACE_TEXT_ALWAYS_CHAR(section_name.c_str()), QosSettings::datawriter);
} else if (std::strcmp(section_type, DATAREADER_QOS_SECTION) == 0) {
  status = parse_qos(
    config, subkey, ACE_TEXT_ALWAYS_CHAR(section_name.c_str()), QosSettings::datareader);
} else if (std::strcmp(section_type, PUBLISHER_QOS_SECTION) == 0) {
  status = parse_qos(
    config, subkey, ACE_TEXT_ALWAYS_CHAR(section_name.c_str()), QosSettings::publisher);
} else if (std::strcmp(section_type, SUBSCRIBER_QOS_SECTION) == 0) {
  status = parse_qos(
    config, subkey, ACE_TEXT_ALWAYS_CHAR(section_name.c_str()), QosSettings::subscriber);
} else {
  ACE_ERROR((LM_ERROR, ACE_TEXT("unknown section %C\n"), section_type));
}

 

다음 글에서 계속…

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band

댓글

비밀글모드