使用 64 位非托管回调时的调用约定
calling convention when using 64bit unmanaged callback
我在 C# 代码中使用了一个非托管处理程序,委托定义如下
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate int Callback (arguments)
它在 32 位版本中运行良好,我想问我在 64 位版本中必须进行哪些更改。包含处理程序的 dll 的 C header 将所有函数定义为 __stdcall
如果是 WIN32,如果是 WIN64 则定义为 __fastcall
(即 dll 有 32 位和 64 位版本)。但是在 NET 文档中说不支持 fastcall。我不明白这一切意味着什么,我应该如何更改(或不更改)64 位代码?
您无需执行任何操作。以 64 位代码为目标时,调用约定指令将被忽略,因为该体系结构只有一个调用约定。保持代码不变。它将在 32 位和 64 位编译中正常工作。
我在 C# 代码中使用了一个非托管处理程序,委托定义如下
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate int Callback (arguments)
它在 32 位版本中运行良好,我想问我在 64 位版本中必须进行哪些更改。包含处理程序的 dll 的 C header 将所有函数定义为 __stdcall
如果是 WIN32,如果是 WIN64 则定义为 __fastcall
(即 dll 有 32 位和 64 位版本)。但是在 NET 文档中说不支持 fastcall。我不明白这一切意味着什么,我应该如何更改(或不更改)64 位代码?
您无需执行任何操作。以 64 位代码为目标时,调用约定指令将被忽略,因为该体系结构只有一个调用约定。保持代码不变。它将在 32 位和 64 位编译中正常工作。