다음 수정들은 좀 지저분하다.
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
DCPSInfo_i.cpp 파일에서 다음 부분을 찾는다.
if (this->dispatchingOrb_->work_pending())
{
// Ten microseconds
ACE_Time_Value small(0,10);
this->dispatchingOrb_->perform_work(small);
}
비주얼 스튜디오에선 small이 이미 선언되어 있기 때문에 컴파일이 실패하는 것이다.
여기서 small을 smallval 등의 다른 이름으로 대체한다.
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));
}
다음 글에서 계속…
Log4j 사태로 대체 정부는 왜 까는 거지? (2) | 2021.12.12 |
---|---|
윈도우에서 OpenDDS 제대로 컴파일 하기 #4 (0) | 2021.12.07 |
윈도우에서 OpenDDS 제대로 컴파일 하기 #2 (0) | 2021.12.07 |
윈도우에서 OpenDDS 제대로 컴파일 하기 #1 (0) | 2021.12.07 |
영혼을 끌어모아 라이젠 5900X로 업그레이드 (0) | 2021.11.15 |