Внешний файл сборки в visual studio

Я искал и обнаружил, что не могу использовать __asm в x64 в visual studio. Вместо этого я должен использовать внешний файл сборки.

Как добавить внешний файл сборки в мой проект консоли win32?

Как скомпилировать их?

Можете ли вы объяснить шаг за шагом.

Ответ 1

Как создать x64-проект со смешанным исходным кодом с помощью файла сборки x64 в Visual Studio:

1) Запустите Visual Studio (Community) 2015 и выберите FILE - New - Project.

Screenshot

2) В следующем окне выберите Win 32 Console Application.

Screenshot

3) Вы получаете подтверждение. Нажмите на Next >.

Screenshot

4) В следующем окне вы можете принять настройки по умолчанию. Нажмите на Finish.

Screenshot

5) Теперь выберите PROJECT - Build Customizations...

Screenshot

6) В следующем окне отметьте " masm(.targets,.props) и нажмите " OK.

Screenshot

7) Выберите Build - Configuration Manager...

Screenshot

8) Измените платформу Active solution platform на x64

Screenshot

9) Создать callee.asm: PROJECT - Add New Item.

Screenshot

10) В следующем окне выберите C++File(.cpp) и - ВАЖНО! - дать ему имя с расширением .asm. Нажмите на Add.

Screenshot

10) Теперь проверьте, имеет ли файл .asm правильные свойства. В обозревателе решений щелкните правой кнопкой мыши файл и выберите " Properties.

Screenshot

11) На странице свойств вы должны увидеть как минимум:

Excluded From Build    (empty) or No
Item Type              Microsoft Macro Assembler

Screenshot

В Command Line убедитесь, что ml64.exe выбран в качестве ассемблера.

Screenshot

Нажмите на OK.

12) Теперь вы можете заполнить файлы контентом.

ConsoleApplication1.cpp:

#include <iostream>
using namespace std;

extern "C" void hello_from_asm();

int main()
{
    cout << "Hello from CPP" << endl;
    hello_from_asm();
    return 0;
}

callee.asm:

PUBLIC hello_from_asm
EXTERN puts:PROC

.data

    hello1 db "Hello from ASM.",0

.code

hello_from_asm PROC
    push rbp
    mov rbp, rsp
    sub rsp, 32                 ; Shadow Space
    and spl, -16                ; Align stack at 16

    lea rcx, hello1
    call puts

    leave                       ; Restore stack (rsp) & frame pointer (rbp)
    ret
hello_from_asm ENDP

END

13) Сборка .exe

Screenshot

и запустите его с CTRL-F5.

Приложение будет открыто в новом окне.