Страница 1 из 1

Clarion 10 & CPP

Добавлено: 24 Октябрь 2015, 5:12
Admin
два файла CPP_Demo.clw и cpp_module.cpp
оба компилируются но потом выдается:
Unresolved External _addition in CPP_Demo.obj
почему не находит?

Код: Выделить всё

  PROGRAM

  MAP
    MODULE('cpp_module.cpp')
      addition(LONG, LONG), LONG, PASCAL, NAME('_addition')
    END
  END

  CODE
  MESSAGE(addition(10,10))

Код: Выделить всё

int addition (int a, int b)
{
  int r;
  r = a + b;
  return r;
}

Clarion 10 & CPP

Добавлено: 24 Октябрь 2015, 13:33
kreator
А попробуй PASCAL на С заменить. Я Сишную библиотеку вот так подцепил:

Код: Выделить всё

MODULE('cv')
  cvNamedWindow(*STRING,LONG),LONG,C,RAW,PROC
END
Прокатило и заработало.

Clarion 10 & CPP

Добавлено: 24 Октябрь 2015, 13:37
Admin
Так ведь дело не в вызове а в линковке. В Clarion 6.3 работало. Сейчас проверить не могу т.к. на x64 сижу. Приходится в C10 писать.
CPP на текущий момент не актуально уже. По теме SSL хотел кое что проверить.

Clarion 10 & CPP

Добавлено: 24 Октябрь 2015, 16:17
Дед Пахом
Что-то в проекте не так, линковщик не видит сишный модуль.

Clarion 10 & CPP

Добавлено: 24 Октябрь 2015, 17:22
Ал
Admin писал(а):Так ведь дело не в вызове а в линковке. В Clarion 6.3 работало. Сейчас проверить не могу т.к. на x64 сижу. Приходится в C10 писать.
CPP на текущий момент не актуально уже. По теме SSL хотел кое что проверить.
virtual pc нет или религия не позволяет?

Clarion 10 & CPP

Добавлено: 24 Октябрь 2015, 17:40
Admin
Ал писал(а): virtual pc нет или религия не позволяет?
Не стОит. На работе попробую. Virtual Box есть ... СentOS на нем кручу. :)

Clarion 10 & CPP

Добавлено: 25 Октябрь 2015, 12:32
kreator
Дед Пахом писал(а):Что-то в проекте не так, линковщик не видит сишный модуль.
Скорее всего, что или либа в проект не подключена, или её нет там, где должна быть.

Clarion 10 & CPP

Добавлено: 25 Октябрь 2015, 12:35
Admin
модуль cpp_module.obj создается.
_addition@Fii внутри присутствует.

Clarion 10 & CPP

Добавлено: 25 Октябрь 2015, 13:10
Дед Пахом
а если cpp_module.obj включить в проект?

Clarion 10 & CPP

Добавлено: 25 Октябрь 2015, 13:22
Admin
Не помогает.
Помогло в атрибуте NAME прописать "_addition@Fii". Скомпилировалось.
Но результат функции - лажа а не 20

Clarion 10 & CPP

Добавлено: 25 Октябрь 2015, 13:27
Дед Пахом
кстати, почему PASCAL?

Clarion 10 & CPP

Добавлено: 25 Октябрь 2015, 14:08
Admin
В данном случае по моему не важно. И да, оба варианта не работают :)
В PASCAL еще и падает почему то, хотя не должно.

Clarion 10 & CPP

Добавлено: 25 Октябрь 2015, 14:37
Admin
Вопрос решен :)

Код: Выделить всё

  PROGRAM

  MAP
    MODULE('cpp_module.cpp')
      addition(LONG, LONG), LONG, NAME('_addition')
    END
  END
  
  CODE
  MESSAGE(addition(10,10))

Код: Выделить всё

extern "C" int addition (int a, int b)
{
  int r;
  r = a + b;
  return r;
}