Передача параметров в DLL 32 бит против 64 бит - PullRequest
0 голосов
/ 20 декабря 2018

Я мигрирую приложение и DLL с 32-х бит на 64-х бит.Я обнаружил, что вызовы dll из приложения неправильно передают параметры.

Ниже приведен пример вызова приложения, где 123 должно быть передано подпрограмме dll:

    unsigned short tmpId = 123;
    SetDisExerciseId(tmpId);

При отладке dll в 32-битном режиме (вызов из 32-битного приложения) я вижу следующее:

Значение и окно регистров при вызове с использованием 32-битного.

но когда я пытаюсь вызвать из 64-битного приложения в 64-битный dll, я получаю следующее:

Значение и регистры окна при вызове с использованием 64-битного.

Я вижу, что значение 0x007b (123) передается в регистр ECX в 32-битной версии и в регистре RCX, но я вижу, что значение exId не одинаково при просмотре значения в 64-немного.Он выглядит как 0xebb0, который, скорее всего, поступает из регистров RDX или RDI.

По следующей ссылке https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2017#parameter-passing выясняется, что параметр действительно должен быть передан через регистр RCX..

Я действительно озадачен, почему правильное значение не передается.

Любая помощь, которую вы можете оказать, будет оценена.

...