Альтернативные операторы - вызывают ошибки во встроенной сборке - PullRequest
0 голосов
/ 14 мая 2018

Я работаю над проектом, написанным на C ++, который включает внедрение исходного кода в уже скомпилированный (и работающий) процесс, и поэтому в некоторых случаях мне нужно писать встроенную сборку.Это короткое введение, чтобы избежать каких-либо комментариев, говорящих мне, что встроенная сборка, вероятно, не должна использоваться.

Итак, что касается моего реального вопроса, я обнаружил, что в C ++ есть альтернативные операторы, и некоторые из них, особенно и и или очень напоминают мне Python, язык программирования, который мне очень нравится с точки зрения синтаксиса.

Я знаю, что использование этих альтернативных операторов, конечно, не такв лучших практиках, и его следует избегать, но это личный проект, поэтому читаемость кода для других не слишком беспокоит меня.

Мой проект скомпилирован с помощью компилятора MSVC, и мое первое наблюдение состояло в том, что этиальтернативные операторы, по-видимому, не определены по умолчанию.После небольшого исследования я обнаружил, что одним из способов их включения было включение <ciso646>.Итак, миссия выполнена, подумал я.

Но при компиляции я обнаружил, что мои встроенные фрагменты сборки теперь вызывают ошибки компиляции, потому что они содержат инструкции asm, такие как или и и .Да, встроенная сборка написана в нижнем регистре.Таким образом, возможный обходной путь будет заключаться в том, чтобы прописать все мои фрагменты встроенной сборки, но так как мне не очень нравится стиль ALL CAPS RAGE STYLE, я спрашиваю здесь, есть ли другой обходной путь для этой проблемы.

Вот пример встроенной сборки, вызывающей проблемы

__declspec (naked) Unit* __fastcall D2CLIENT_GetClientUnit(int nGUID, DWORD dwType)
{
    /*
        push dwType
        mov eax, nGUID & 0x7F
        mov edx, ((dwType << 9) + D2CLIENT_6FBBA608)
        call D2CLIENT_6FB54E20
    */

    __asm
    {
        push edx
        mov eax, ecx
        shl edx, 0x09
        and eax, 0x7F
        add edx, [D2CLIENT_6FBBA608]
        call D2CLIENT_6FB54E20
        retn
    }
}

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...