从共享对象调用外部类成员
Calling external class members from shared object
在这里和这里阅读了很多之后,我仍然不能让我的代码工作。问题在这里:
我有两个类,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),它是用Fifo
和Process_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'。
显然,我没有看到问题是那么简单,我的(错误的)假设是,问题与正确使用指向初始化对象的成员函数的指针有关。
我知道我发布的问题描述可能不清楚,所以对此表示歉意。
谢谢大家。
- 在 C++ 中从类外部修改类的成员
- 用作默认参数的静态成员会导致无法解析的外部
- 使用静态 constexpr 成员的未解析外部符号
- 具有外部定义的默认特殊成员函数
- DLL+导出类+模板成员func=未解析的外部符号.任何修复的机会
- 从类C++外部调用指向成员方法的成员指针
- 在成员函数外部封闭类的定义中需要默认成员初始值设定项
- 作为成员的静态类模板实例会导致未解析的外部符号错误
- 为什么在类外部(但在头文件中)定义的类成员函数必须内联?
- LNK2001 SHA3 类成员的未解析外部符号
- 从内部类访问外部公共成员
- 在类外部初始化的 constexpr 静态成员的声明中是否需要 constexpr 说明符
- 类的成员函数,具有类外部的模板参数和默认参数
- 从不同的标头访问外部结构成员
- 访问说明符外部的 C++ 类成员
- (C++)(链接错误)模板成员函数上未解析的外部
- 是否有一种方法可以让公共成员在班级外部无法解码,而无需访问包装器功能
- 为什么私有继承对象允许成员函数将派生的*转换为基*,而外部不能
- 成员静态回调函数的外部"C"
- LNK 2001 未解析的外部在 NPPluginFuncs 结构 ptr 作为静态类成员