问题标签 [intptr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++-cli - 从 HBITMAP 创建位图 (.NET)
我正在使用 C++/CLI 并且我有一个 rawHBITMAP
调用hStrip
,我必须在 a 中显示它PictureBox
,所以我找到了以下函数System::Drawing::Image::FromHbitmap
,但是这需要我想知道在传递它之前IntPtr
是否需要将我的 raw 转换HBITMAP
为或者我是否需要IntPtr
可以像这样通过它吗?
如果我需要转换,我应该如何转换?我还没有真正找到这种转换方式。不过,我确实找到了另一种方式。
c# - 在 C#(全屏游戏)中获取中间屏幕像素(颜色)?
我正在运行全屏游戏,并试图找出中间像素的颜色。然而,我正在使用的代码似乎只适用于窗口应用程序/游戏/等。这是我的代码:
我得到这样的中间屏幕像素:
那么如何让这段代码兼容全屏游戏呢?它给了我一个 ARGB 值A = 255, R = 0, G = 0, B = 0
,即使我 100% 肯定中间屏幕像素是红色的。
64-bit - 为什么 IntPtr.ToInt32 在 64 位模式下抛出 OverflowException 而 Explicit(IntPtr to Int32) 不会
运营商在 MSDN 上的描述有一个备注:
仅当 value 的值需要比当前平台支持的更多位时才会引发异常。
whileToInt32
的描述不是,所以我认为标题并不完全正确(为简洁起见),
一个更正确的问题是:“为什么在 64 位模式下IntPtr.ToInt32
抛出适合 Int32和 Explicit(IntPtr to Int32) 的值不”OverflowException
在反编译IntPtr
ToInt32
中和操作符看起来很相似:
我想知道是什么ToInt32
导致抛出异常,它是 unsafe 关键字吗?
dll - PInvoke C# 到 C++。字符串末尾的奇怪字符
我几乎阅读了有关该主题的所有问题,但仍然没有解决方案。
这是DLL函数:
在我的 C# 应用程序中,我已经尝试不成功地传递字符串和 StringBuilder 参数。在这个问题中,建议使用PInvoke Interop Assistant,并建议使用 IntPtr。这是我的包装 C# 类:
在所有情况下,结果总是相同的:parameters.txt
这是一个移动应用程序,所以我使用的是 .NET Compact Framework 3.5。
有什么建议么?感谢您的时间。
c# - 访问32位内存地址c#
我正在尝试访问一个 32 位地址,但是当我创建 IntPtr 时,它会抛出一个 OverflowException。这是代码:
我怎样才能访问该地址?
.net - 如何将一个 IntPtr 分配给另一个 IntPtr
我正在尝试使用 BitmapData 类?并且在将 IntPtr 值分配给 BitmapData.Scan0 属性时遇到一些问题。这是我的代码:
但是,解锁图像后,它不会改变。为什么?在调试模式下,我看到 data.Scan0 更改为 rh.data.Scan0HGlobal 值。在 rh.data.Scan0HGlobal 我有指向内存的指针,其中包含像素的原始数据。
windows-8 - IntPtr.ToInt32() 和 x64 系统
在我的 c# dll 中,我有一些这样的代码可以与一些非托管 dll 交互:
在安装 Windows 8 之前,在 x64 系统上使用带有 .Net2 和 .Net4 的 AnyCPU 编译的 dll 时,这一直运行良好。
在 Windows 8 中使用 .Net4 dll 时,我在 buffer.ToInt32() 调用中收到 OverFlowException(“算术运算导致溢出。”)。
IntPtr.ToInt32() 的 MSDN 文档说:
“OverflowException:在 64 位平台上,此实例的值太大或太小,无法表示为 32 位有符号整数。”
我想知道为什么这个问题只出现在 Windows 8 中,以及修复它的正确方法是什么。
我应该使用这样的方法,而不是 IntPtr.ToInt32() 调用吗?
c# - 如何在 C# 中将 IntPtr 转换为 Boolean[]?
背景资料
我在 C 中有一个函数,它返回一个void*
.
我开始测试两个项目之间的转换,将true
或分配false
给指针,回到 C# 中,我得到了IntPtr
,我使用了该IntPtr.ToPointer()
函数,然后将其转换为一个字节,根据我读到的内容,这相当于 c# 中的布尔值.
这对我来说很好。
DLL 导入:
使用功能:
问题
当我尝试做同样的事情但将一个布尔数组分配给指针时,我无法在 C# 中将其取回。
这就是 C 中的函数的样子
我在 C# 中尝试做的事情:
(1) 我尝试了相同的“强制转换”,这次是字节数组。这给了我一个空引用异常:
(2)因为那没有用,经过一些研究,我尝试了这个Marshal.Copy
函数,将我的指针复制到一个字节数组。尽管这一次我没有得到任何异常,但我没有得到正确的结果。我的意思是,例如,如果数组的第一个布尔值是假的,我就会得到真。
这是 C# 代码的样子:
问题
所以我的问题是从 C# 中的 IntPtr 转换为布尔数组的正确方法是什么?
c# - C# 从 C malloc 中释放 IntPtr
我在 C 上有一个带有 func 的非托管 DLL:
在这个函数中我有
在 C# 中我导入它
并称它为
如何释放 char* 或 IntPtr?
Marshal.FreeHGlobal(IntPtr) 和 Marshal.FreeCoTaskMem(IntPtr) 不起作用。
c# - C#从窗口句柄获取父进程
我有一个 C# windows 应用程序,并最终从互操作组件启动一个对话框。问题是这个对话窗口有时会出现在 c# 应用程序的主窗口后面,迫使用户使用 alt-tab 来找到它。
我已经采取措施找到这个对话窗口并将其提出来......
...但是“找到”对话框是有问题的,因为对话框的 className 和表单标题发生了变化。
但是,对话框窗口的父进程(任务管理器>转到进程)与当前进程相同。因此,为了正确“找到”这个对话框窗口,我的目标是枚举所有窗口,找到父进程 ID 并与 CurrentProcess 进行比较。
有没有办法从窗口句柄获取整个父进程?