有沒有辦法調用內存地址(如(void *)f = 0xFFFF;)沒有IntPtr或任何本機Win32函數。我需要一個可執行裝載機做到這一點(這是一個使用開源項目名爲COSMOS的OS)C#void指針?
1
A
回答
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 /寄存器操作,我猜... –
相關問題
- 1. C++ void指針
- 2. void指針
- 3. 在C++中指向void的指針?
- 4. 返回void的C++/C函數指針*
- 5. 包裝void指針在C++/CLI和C#
- 6. 綁定void *指向C++/Cli基本類型指針的指針
- 7. 使用void指針在C++中打印數組我使用void指針
- 8. 類的指針void *
- 9. 在C++中刪除void *指針
- 10. 鑄造指針對象爲void *在C++
- 11. C中的void指針傳遞結構
- 12. C++ void指針得到結構體
- 13. 怎麼辦我投void指針用C
- 14. Casting void指針,取決於數據(C++)
- 15. C void *函數指針參數
- 16. C:從void指針的外插類型
- 17. C:使用void指針數組工作
- 18. 試驗在C++ void指針刪除
- 19. C - 取消引用void指針
- 20. ISO C Void *和函數指針
- 21. 什麼是C++中的void指針?
- 22. void *指針上的指針運算
- 23. int指針變爲void指針,然後變成雙指針
- 24. 如何將void(__thiscall MyClass :: *)(void *)轉換爲void(__cdecl *)(void *)指針
- 25. 右鍵投給void *指針
- 26. 追加兩個void *指針
- 27. 複製到void *指針
- 28. 特殊指針值((void *)1)
- 29. void *與char *指針算術
- 30. cpp make_shared for void指針
爲什麼'沒有IntPtr'? –
爲什麼沒有'IntPtr'?那麼你想如何表達你的指針值?您可以在不安全的代碼中使用指針類型變量。 –
我不是這方面的專家,但它可能在「不安全」的塊中。 (http://msdn.microsoft.com/en-us/library/y31yhkeb%28v=vs.100%29.aspx和http://stackoverflow.com/questions/3069448/how-to-declare-a-void - 尖指針) – Jensen