2012-08-03 92 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