class A{
A();
void a();
virtual void v();
}
сделать это в liba.so
class B : A {
B();
void b();
void v();
}
extern "C" {
A* newB() {
return new B();
}
void calla(A*b) {
b->a();
}
void callv(A*b) {
b->v();
}
}
сделать это в libb.so
в python:
from ctypes import cdll
lib = cdll.LoadLibrary('./libb.so')
class B(object):
def __init__(self):
self.obj = lib.newb()
def a(self):
lib.calla(self.obj)
def v(self):
lib.callv(self.obj)
b = B()
b.a() # call base class function, that's ok
b.v() # call derive class virtual function , segment fault!
Означает ли это, что Python не можетиспользовать dll, включая логику наследования?
кажется, что Python не может вызвать класс c ++, так как вход в его функцию изменил логику наследования bc, кто-нибудь может поговорить об этом?
Спасибо