小编Kee*_*Jan的帖子

与dlopen/dlsym一起使用时,dynamic_cast失败

介绍

让我为这个长期问题道歉.它尽可能短,但不幸的是,它不是很短.

建立

我定义了两个接口,A和B:

class A // An interface
{
public:
  virtual ~A() {}

  virtual void whatever_A()=0;
};

class B // Another interface
{
public:
  virtual ~B() {}

  virtual void whatever_B()=0;
};
Run Code Online (Sandbox Code Playgroud)

然后,我有一个共享库"testc"构建类C的对象,同时实现A和B,然后传递指向它们的A接口的指针:

class C: public A, public B
{
public:
  C();
  ~C();

  virtual void whatever_A();
  virtual void whatever_B();
};

A* create()
{
  return new C();
}
Run Code Online (Sandbox Code Playgroud)

最后,我有一个第二个共享库"testd",它接受一个A*输入,并尝试将其转换为a B*,使用dynamic_cast

void process(A* a)
{
  B* b = dynamic_cast<B*>(a);
  if(b)
    b->whatever_B();
  else
    printf("Failed!\n");
}
Run Code Online (Sandbox Code Playgroud)

最后,我有主要的应用程序,A*在库之间传递:

A* …
Run Code Online (Sandbox Code Playgroud)

c++ linux dynamic-cast dlopen dlsym

13
推荐指数
2
解决办法
6809
查看次数

标签 统计

c++ ×1

dlopen ×1

dlsym ×1

dynamic-cast ×1

linux ×1