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

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

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

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

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

1 ответ

Решение

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

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

Скриншот

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

Скриншот

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

Скриншот

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

Скриншот

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

Скриншот

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

Скриншот

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

Скриншот

8) Изменить Active solution platform до х64

Скриншот

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

Скриншот

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

Скриншот

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

Скриншот

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

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

Скриншот

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

Скриншот

Нажмите на 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

Скриншот

и запустить его с помощью CTRL-F5.

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

Другие вопросы по тегам