2012-08-25 120 views
1

有没有办法调用内存地址(如(void *)f = 0xFFFF;)没有IntPtr或任何本机Win32函数。我需要一个可执行装载机做到这一点(这是一个使用开源项目名为COSMOS的OS)C#void指针?

+0

为什么'没有IntPtr'? –

+0

为什么没有'IntPtr'?那么你想如何表达你的指针值?您可以在不安全的代码中使用指针类型变量。 –

+0

我不是这方面的专家,但它可能在“不安全”的块中。 (http://msdn.microsoft.com/en-us/library/y31yhkeb%28v=vs.100%29.aspx和http://stackoverflow.com/questions/3069448/how-to-declare-a-void - 尖指针) – Jensen

回答

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位)的典型指针值。

我不这样认为,因为你必须指定一个调用约定,以便能够在正常的C#委托语法中使用它。对于这个事实感到满意,Marshal.GetDelegateForFunctionPointer独立完成所有肮脏的工作,平台!

+0

关于OP给出的有关其编译器的问题的最后一条评论:忽略我的答案。但是在编译器中实现IntPtr会不会更容易?否则,你不得不求助于ASM /寄存器操作,我猜... –