2012-08-25 122 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 /寄存器操作,我猜... –