将参数传递给dll 32位和64位

时间:2018-12-20 16:31:09

标签: visual-c++ dll 64-bit 32bit-64bit 32-bit

我正在将应用程序和dll从32位迁移到64位。我发现从应用程序对dll的调用未正确传递参数。

下面是应用程序中的一个示例调用,应将123传递给dll例程:

    unsigned short tmpId = 123;
    SetDisExerciseId(tmpId);

在32位调试dll(从32位应用程序调用)时,我看到以下内容:

Value and registers window when calling using 32-bit.

但是当我尝试从64位应用程序调用到64位dll时,得到以下信息:

Value and registers window when calling using 64-bit.

我可以看到在32位版本的ECX寄存器和RCX寄存器中传递的值为0x007b(123),但是在以64位查看值时,可以看到exId的值不相同。它显示为0xebb0,很可能来自RDX或RDI寄存器。

从下面的链接https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2017#parameter-passing看来,该参数确实应该已经通过RCX寄存器传递了。

我真的很困惑为什么未传递正确的值。

您能提供的任何帮助将不胜感激。

0 个答案:

没有答案