1

无论如何调用内存地址(如 (void*) f = 0xFFFF; )没有 IntPtr 或任何本机 Win32 函数。我需要为可执行加载器执行此操作(适用于使用名为 COSMOS 的开源项目的操作系统)

4

1 回答 1

1

如果不使用,就无法以适当的 C# 高级方式进行操作Marshal.GetDelegateForFunctionPointer

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate void CallMeDelegate(int i);

CallMeDelegate del = (CallMeDelegate)Marshal.GetDelegateForFunctionPointer(new IntPtr(0xffff), typeof(CallMeDelegate));

请注意,IntPtr 不是原生 Windows 仅仅是因为它的名称:它是当前编译目标(32 位或 64 位)的典型指针值。

我认为您无法使用该 API,因为您必须指定一个调用约定才能在正常的 C# 委托语法中使用它。对 Marshal.GetDelegateForFunctionPointer 为您完成所有繁琐的工作感到满意,平台独立!

于 2012-08-25T08:20:42.677 回答