Как использовать ctypes, c++ и python?

Разбираюсь с инструментом ctypes для вызова dll из python кода. Не удается вызвать функции из dll скомпилированной из С++, хотя тот же самый исходный код, но уже на С, скомпилированный в dll, работает нормально, все функции вызываются.

Код C/C++:
int test(int x)
{
return x;
}

Код Python:
from ctypes import *
c_testlib = cdll.LoadLibrary('libtest.dll')
c_test=c_testlib.test

Ошибка:
AttributeError: function 'test' not found

Ctypes и С++ не дружат? Какие могут быть варианты вызова функций из уже написанных dll на C++ ?
  • Вопрос задан
  • 4861 просмотр
Решения вопроса 2
@C00Lman
extern "C" надо перед функциями писать, чтоб компилятор в dll-ке называл их по C-шному, а не по C++-ному
Ответ написан
Комментировать
@xandox
Смотри. С - не поддерживает перегрузку функция, по этому в с не бывает двух функций с одним именем и разными аргументами, по этому компилятор сохраняет их имена как есть (ну почти, но всегда одинаково). С другой стороны С++ поддерживает перегрузку, но что бы можно было однозначно определить по какому адресу вызывается функция ее имя декорируется, новое имя зависит от типов аргументов и если это метод класса, то еще и имени класса и возможно его шаблонных параметров, и плюсом сюда еще идет, то что каждый компилятор делает это по своему, по этому нет нормального способа, найти функцию по имени в dll скомпилированной с++ компилятором. Но есть способ сказать компилятору, что бы он не декорировал имена функция - это extern "C". Тогда компилятор оставит сишные имена у функций.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 12:20
15000 руб./за проект
25 апр. 2024, в 12:08
300 руб./за проект
25 апр. 2024, в 11:49
25000 руб./за проект