Через ctypes можно вызывать с++ и без extern C. Но это будет "непереносимый код". Так как name mangling не стандартизован, и каждый компилятор будет генерировать свои экспортируемые имена функций. Если их подсмотреть в библиотеке — их также можно спокойно вызвать.
Под linux посмотреть имена функций можно с помощью nm. Для test.cpp без extern C будет примерно так:
nm -D libtestcpp.so
...
00000000000014cc T _Z12test_ret_intP4testi
00000000000013ab T _Z12test_ret_strP4testPc
00000000000014ee T _Z15test_ret_doubleP4testd
0000000000001370 T _Z8test_newv
...
И вот они, имена функций.
Под Windows можно посмотреть с помощью link /dump /exports libtestcpp.dll
Через ctypes можно вызывать с++ и без extern C. Но это будет "непереносимый код". Так как name mangling не стандартизован, и каждый компилятор будет генерировать свои экспортируемые имена функций. Если их подсмотреть в библиотеке — их также можно спокойно вызвать.
Под linux посмотреть имена функций можно с помощью nm. Для test.cpp без extern C будет примерно так:
И вот они, имена функций.
Под Windows можно посмотреть с помощью
link /dump /exports libtestcpp.dll