2012-01-03 95 views
1

经过大量的阅读herehere,我仍然无法让我的代码正常工作。这里的问题是:从共享对象调用外部类成员

我有两个类,先进先出:

#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文件知道这些类的接口。

我将这个.so文件从Process_WrapperProcess_Wrapper::function2)的成员函数中调用并传递给.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的成员函数以传递给另一个函数,以便它可以用作普通指针函数。或者,特别是:如何从绑定指针提取函数指针到成员函数?

+0

你只是想传递一个方法指针,就是这样吗? – Geoffroy 2012-01-03 22:23:23

+0

你从哪里学习C++? – StackedCrooked 2012-01-03 22:33:21

+3

“如何从指向成员函数的绑定指针中提取函数指针?”你不能。 – 2012-01-03 22:43:48

回答

1

为了回答我自己的问题,我将“this”指针传递给.so对象。但是,在运行时,我收到了关于未找到符号的错误。这个符号是'U'或者在.so文件中没有映射,但是在主exe文件('T')中定义了,它会加载这个.so文件。我所要做的只是将'-rdynamic'添加到生成主exe文件的链接器选项中。很明显,我没有看到问题很简单,我的(不正确的)假设是问题与正确使用指向已初始化对象的成员函数的指针有关。

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

谢谢大家。