C++ 设置一个C++;将成员函数转换为DLL中的函数

C++ 设置一个C++;将成员函数转换为DLL中的函数,c++,function,pointers,member,C++,Function,Pointers,Member,我正在尝试这样做: 创建对象并将其成员函数绑定到DLL中的函数。比如说, class A { private: int a; public: void func_a(); }; 从DLL加载时,我想创建一个对象,并将func_a设置为从DLL加载的函数 A aObj; (aObj.*func_a)() = getAdr(&s, h, "fmiGetTypesPlatform"); 我不知道它的语法,但我的意思是我想设置 getAdr(&s, h, "fmiGetTypesP

我正在尝试这样做: 创建对象并将其成员函数绑定到DLL中的函数。比如说,

class A {
private:
int a;
public:
void func_a();
};
从DLL加载时,我想创建一个对象,并将func_a设置为从DLL加载的函数

A aObj;
(aObj.*func_a)() = getAdr(&s, h, "fmiGetTypesPlatform"); 
我不知道它的语法,但我的意思是我想设置

getAdr(&s, h, "fmiGetTypesPlatform");  
到对象的成员函数


提前感谢。

您需要的是函数指针:

class A {
private:
    int a;
public:
    void (*func_a)();
};
然后,您可以像设置任何其他指针一样设置它

A aObj;
aObj.func_a = getAdr(&s, h, "fmiGetTypesPlatform");
请注意,引用的函数fmiGetTypesPlatform()是一个常规函数。它不是一个类方法(例如,no this等),它通过其函数指针被调用

(*aObj.func_a)();

您要查找的是函数指针:

class A {
private:
    int a;
public:
    void (*func_a)();
};
然后,您可以像设置任何其他指针一样设置它

A aObj;
aObj.func_a = getAdr(&s, h, "fmiGetTypesPlatform");
请注意,引用的函数fmiGetTypesPlatform()是一个常规函数。它不是一个类方法(例如,no this等),它通过其函数指针被调用

(*aObj.func_a)();

如果在编译时知道要使用哪些DLL函数,则可以将类成员设为单行包装器,并封装对象内部所需的任何数据

如果您希望能够将任意函数分配给类成员,则函数指针将起作用,只需进行一些额外的设置。示例代码:

注意,您可以使用通常的
object.func()
语法,按名称调用存储为类成员的函数指针,就像调用函数一样。事实上,这就是虚拟成员函数的实现方式


但是,如果调用不是静态的,您可能仍然希望在它们周围放置一个包装器,以便使它们使用的数据对您的类是私有的。

如果您在编译时知道要使用哪些DLL函数,则可以将类成员设为单行包装器,并将您需要的任何数据封装在对象内部

如果您希望能够将任意函数分配给类成员,则函数指针将起作用,只需进行一些额外的设置。示例代码:

注意,您可以使用通常的
object.func()
语法,按名称调用存储为类成员的函数指针,就像调用函数一样。事实上,这就是虚拟成员函数的实现方式


但是,如果调用不是静态的,您可能仍然希望在它们周围放置一个包装器,以便使它们使用的数据对您的类是私有的。

您是指第三方预构建的DLL?你不能。只需使用“一行”方法,如果是DLL,你可以“导出”整个C++类。它是第三方预构建的DLL意思是第三方预构建的DLL。你不能。只使用“一行”方法,如果是DLL,你可以导出整个C++类。它是第三方预构建的DLLI首先寻找一个不使用函数指针的解决方案,但我认为没有其他方法。现在,如果a需要函数指针,那么我想设计一个从类a派生的类B,它保存func_a的函数指针。现在,我如何使用A(基类指针)调用B的函数指针,该指针将连接到DLL?在A
virtual
中声明相应的函数,并可能将其设置为
=0
。我首先寻找了一个不使用函数指针的解决方案,但我认为没有其他方法。现在,如果a需要函数指针,那么我想设计一个从类a派生的类B,它保存func_a的函数指针。现在,我如何使用A(基类指针)调用B的函数指针,该指针将连接到DLL?在A
virtual
中声明相应的函数,并可能将其设置为
=0
。我首先寻找了一个不使用函数指针的解决方案,但我认为没有其他方法。现在,如果a需要函数指针,那么我想设计一个从类a派生的类B,它保存func_a的函数指针。现在,如何使用A(基类指针)调用B的函数指针,该指针将连接到DLL?添加一个虚拟方法类A。在类B中实现虚拟方法,该方法将返回指针。但是,在我看来,您根本不需要函数指针。这是第一次提到类继承。在我看来,虚拟方法是所有需要的。类B中的虚方法是您打算通过指针调用的函数。除了根本没有指针。只是一个虚拟类方法。我首先寻找一个不使用函数指针的解决方案,但我认为没有其他方法。现在,如果a需要函数指针,那么我想设计一个从类a派生的类B,它保存func_a的函数指针。现在,如何使用A(基类指针)调用B的函数指针,该指针将连接到DLL?添加一个虚拟方法类A。在类B中实现虚拟方法,该方法将返回指针。但是,在我看来,您根本不需要函数指针。这是第一次提到类继承。在我看来,虚拟方法是所有需要的。类B中的虚方法是您打算通过指针调用的函数。除了根本没有指针。只是一个虚拟类方法。