有没有办法调用内存地址(如(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