2014-10-17 66 views
0

我已經在Visual Studio中的windows C++項目中創建瞭解如何編寫asm函數。 所以在我的項目,我已經得到了hello.asm這個簡單的代碼:將彙編函數.asm鏈接到Visual Studio 2012中的C++項目

.686 
.MODEL FLAT 
.STACK 
.DATA 
.CODE 

hello PROC 
xor eax,eax 
ret 
hello ENDP 

END 

和asm_test.cpp與主要功能如下:

#include "stdafx.h" 
#include <Windows.h> 
extern "C" void hello(); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    hello(); 
    return 0; 
} 

所以一般ML.EXE可是沒有任何問題編譯asm文件hello.obj 但hello()函數doesnt'知道應該從哪裏採取。這是編譯器告訴我的。

1>------ Построение начато: проект: asm_test, Конфигурация: Debug Win32 ------ 
1> Assembling hello.asm... 
1>asm_test.obj : error LNK2019: ссылка на неразрешенный внешний символ _hello в функции _wmain 
1>G:\renderer\asm_test\Debug\asm_test.exe : fatal error LNK1120: неразрешенных внешних элементов: 1 
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ========== 

對不起,這是對russion,但很顯然,它不能找到Hello功能

回答

1

變化hello_hello PLZ。對於您的hello.asm,應該是:

.686 
.MODEL FLAT 
.STACK 
.DATA 
.CODE 

_hello PROC 
xor eax,eax 
ret 
_hello ENDP 

END 
+0

謝謝!它的工作,雖然它仍然不明顯,爲什麼它應該是這樣的。你能提供一個小的解釋嗎? – Antiusninja 2014-10-17 19:36:15

+0

@Antiusninja雖然你的代碼引用在'main'中函數'hello'爲'hello()',編譯器會將它轉換爲'_hello()',這就是爲什麼鏈接器找不到符號。 – 2014-10-18 00:21:53