Страница 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;
}