2011-06-02 107 views
2

我想在彙編中編寫一個定製的模塊,並讓我的C++函數調用它。我不想從頭開始編寫「草稿」,而是讓編譯器生成一個藍色打印組件源,即由/ FA編譯器選項生成的列表文件。C++函數調用匯編模塊

但是,我發現生成的所有過程名稱已經以裝飾形式出現。此外,MASM將再次進行自己的名字裝飾。所以,如果我彙編我的版本,而沒有先不手動修改編譯器生成的過程名稱,我會得到一個鏈接器錯誤,因爲函數名稱不匹配。

是否可以防止這種重複的名稱裝飾?

+0

問題其實無關彙編? – 2011-06-02 13:23:19

+0

不要忘記大多數編譯器支持內聯彙編。這可能會讓你不需要擔心C++和彙編器之間的接口 – Jay 2011-06-02 14:05:10

+0

不行,內聯彙編不再是一個好選擇,除非不需要擔心將其升級到x64。 x64不支持內聯彙編,並且對舊代碼造成很大麻煩。 – JavaMan 2011-06-02 15:11:54

回答

1

聲明函數extern "C"應導致生成的彙編程序顯示您應該在彙編程序中使用的名稱。不要忘記在頭文件中使用extern "C",稍後將其聲明爲C++。

+0

我試過外部「C」。正如另一個答覆已經指出的那樣,生成的名字只有一個前導_。但是直接使用這個名字將無濟於事,因爲MASM試圖再次做自己的裝飾。我想避免手動編輯生成的名稱。 – JavaMan 2011-06-02 13:33:11

+0

我對MASM並不熟悉,所以我不能說,但如果沒有辦法可以用'extern「C''生成你的名字,那麼你就有一個真正的問題。 – 2011-06-02 14:57:33

1

你可以聲明你的函數爲extern "C"。這樣一來,它會在大多數名稱前得到一個下劃線:

extern "C"{ 
    void foo(int bla){ 
    } 
} 

將成爲

_foo