使用64位的非托管回调
问题描述:
我已经在C#代码中使用非托管的处理程序,委托就像使用64位的非托管回调
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate int Callback (arguments)
定义时调用约定它运作良好,在32位版本,我要求我必须做什么改变在64位版本。包含处理程序的dll的C头定义了如果WIN32为__stdcall
,如果WIN64为__fastcall
,则所有函数定义为__stdcall
(即dll同时包含32位和64位版本)。但在.NET文档中,据说不支持fastcall。我不明白这意味着什么,我应该如何更改(或不更改)64位代码?
答
你不需要做任何事情。当定位64位代码时,调用约定指令会被忽略,因为该架构只有一个调用约定。保持原样。它将在32位和64位编译时正常工作。
[_fastcall](https://msdn.microsoft.com/en-us/library/6xa169sk.aspx)“此调用约定仅适用于x86体系结构。” –
使用32位版本,因为64位版本是一个快速调用,网络文档称fastcall不受支持。 – jdweng
dll和C头文件都带有我购买的硬件,我没有写过。所以我知道你的-1是硬件供应商。 – user5493558