从共享对象调用外部类成员

Calling external class members from shared object

本文关键字:成员 外部 调用 共享 对象      更新时间:2023-10-16

在这里和这里阅读了很多之后,我仍然不能让我的代码工作。问题在这里:

我有两个类,Fifo:
#ifdef __cplusplus
 extern "C" {
 #endif 
class Fifo
{
public:
   Fifo(int len);
   ~Fifo();
   void  AddTokens(void* buffer, unsigned len);
private:
   // some variables here
};
#ifdef __cplusplus
 }
 #endif 

和另一个类Process_Wrapper:

#ifdef __cplusplus
 extern "C" {
 #endif 

class Process_Wrapper
{
    public:
        Process_Wrapper(const std::string process_name);
        Fifo* GetOutputPortIDtoFifoMap(int portID);
        virtual ~Process_Wrapper();
    protected:
private:
    //some variables here
};
#ifdef __cplusplus
 }
 #endif 

成员函数Process_Wrapper::GetOutputPortIDtoFifoMap返回一个指向Fifo类初始化对象的指针。

现在,我有一个共享对象(.so),它是用FifoProcess_Wrapper类的头编译的。也就是说,.so文件知道这些类的接口。

我从Process_Wrapper (Process_Wrapper::function2)的成员函数中调用这个。so文件,并向。so传递一个指针- this。因此,我假设共享对象将知道关于类Process_Wrapper的所有信息。

在。so文件中,我试图调用成员函数Process_Wrapper::GetOutputPortIDtoFifoMap,这显然不起作用。所以,我试了:

Fifo* (Process_Wrapper::*GetFifoMapping)(int) = p1->wptr->GetOutputPortIDtoFifoMap; 

其中p1->wptr正确返回指向Process_Wrapper对象的指针。

我迷路了。我对这个概念很陌生,这些例子并不能直接回答这个问题。我该怎么做呢?

另外,由于我使用c++ 0x/c++ 11,谁能告诉我(最好)使用std::bind或mem__fun_ref的解决方案?

编辑:好吧,我想我可以完善我的问题:我有一个类Myclass,和一个对象myobject,这是这个类的实例。Myclass有一个成员函数,接受一些参数,并返回一个类型为PTRTYPE的指针。如何提取Myclass的成员函数以传递给另一个函数,这样它就可以用作普通的函数指针。或者,具体地说:我如何从绑定到成员函数的指针中提取函数指针?

为了回答我自己的问题,我将"this"指针传递给。so对象。然而,在运行时,我得到了一个符号没有找到的错误。这个符号在。so文件中是'U'或未映射的,但在主exe ('T')中定义,它将加载这个。so。我所要做的就是在生成主exe的链接器选项中添加'-rdynamic'。

显然,我没有看到问题是那么简单,我的(错误的)假设是,问题与正确使用指向初始化对象的成员函数的指针有关。

我知道我发布的问题描述可能不清楚,所以对此表示歉意。

谢谢大家。