2012-08-03 96 views
0

我已经有一些程序打算用作在Assembly中编写的C++方法(使用适当的调用约定和名称修饰)。但是,当我尝试使用它们时在C++中声明方法extern

class Foo { 
    extern void foo(); 
} 

我得到“类成员的无效存储类”。我如何正确地从外部定义一个C++方法?

一种解决方法是生成一个thunk来定义简单地调用程序集版本的方法,使用内联汇编来支持thiscall约定。事实上,我已经有了生成这些代码的代码。不过,我真的很想得到这个更直接的方法。

+0

你尝试过放弃'extern'吗? – jxh 2012-08-03 18:23:40

+0

你可以使用'extern“C”void foo();'它将使用C的调用约定(无名称修饰/装饰)。你应该可以从程序集中调用它们。 – Wug 2012-08-03 18:25:36

回答

2

只要离开外部。功能在默认情况下在外部可见。

+0

你可能想让它们公开。或者你可以切换到结构。 – emsr 2012-08-03 18:30:38

+0

无论公开与否都不应该在联系方面有所作为。这只对编译器很重要。 – 2012-08-03 18:39:09

+0

是的,我知道。这仅仅是一个普遍的观察。 – emsr 2012-08-04 15:54:11