2014-01-30 42 views
1

基本上,我已经编译了一个写入程序集的文件; .obj file。它有一个导出功能f。在C++中,我编写了一个类,并希望使用导出的函数f作为成员函数。C++链接一个extern函数作为成员函数

如果它被用作一个全局函数,我知道只写extern "C" f()。但是,这不适用于成员函数,至少我没有弄清楚如何去做。

那么,我该怎么做呢?

注意:函数f写入正确。即它考虑到了指针等,它应该在汇编级别正确工作。

+0

难道你不能创建一个类的实例吗?包括定义类的头文件? –

回答

4

如果函数是作为一个自由函数编写的,那么您将不得不按照您习惯的方式将其声明为自由函数。正如你不能建立一个图书馆void foo(),然后以某种方式声明它为void bar()并希望它工作,你不能采取免费的功能,并将其变成一个成员函数。你可以做什么,虽然是加内嵌转发到您的类像这样:

struct S; 
extern "C" void f(S *); 

struct S { 
    void f() { 
     using ::f; 
     f(this); 
    } 
}; 

这是你能做的最好的,据我所知。

+0

我宁愿调用':: f(this)'。更容易理解和维护。 –

+0

@JohnDibling:在这种情况下,要么工作正常,但我更喜欢从不调用限定ADL的函数。 –

+0

但是这正是你想要的吗? –

相关问题