问题标签 [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.

0 投票
1 回答
3423 浏览

c++-cli - 从 HBITMAP 创建位图 (.NET)

我正在使用 C++/CLI 并且我有一个 rawHBITMAP调用hStrip,我必须在 a 中显示它PictureBox,所以我找到了以下函数System::Drawing::Image::FromHbitmap,但是这需要我想知道在传递它之前IntPtr是否需要将我的 raw 转换HBITMAP为或者我是否需要IntPtr可以像这样通过它吗?

如果我需要转换,我应该如何转换?我还没有真正找到这种转换方式。不过,我确实找到了另一种方式。

0 投票
1 回答
2398 浏览

c# - 在 C#(全屏游戏)中获取中间屏幕像素(颜色)?

我正在运行全屏游戏,并试图找出中间像素的颜色。然而,我正在使用的代码似乎只适用于窗口应用程序/游戏/等。这是我的代码:

我得到这样的中间屏幕像素:

那么如何让这段代码兼容全屏游戏呢?它给了我一个 ARGB 值A = 255, R = 0, G = 0, B = 0,即使我 100% 肯定中间屏幕像素是红色的。

0 投票
1 回答
2930 浏览

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 关键字吗?

0 投票
0 回答
549 浏览

dll - PInvoke C# 到 C++。字符串末尾的奇怪字符

我几乎阅读了有关该主题的所有问题,但仍然没有解决方案。

这是DLL函数:

在我的 C# 应用程序中,我已经尝试不成功地传递字符串和 StringBuilder 参数。在这个问题中,建议使用PInvoke Interop Assistant,并建议使用 IntPtr。这是我的包装 C# 类:

在所有情况下,结果总是相同的:parameters.txt

这是一个移动应用程序,所以我使用的是 .NET Compact Framework 3.5。

有什么建议么?感谢您的时间。

0 投票
3 回答
545 浏览

c# - 访问32位内存地址c#

我正在尝试访问一个 32 位地址,但是当我创建 IntPtr 时,它会抛出一个 OverflowException。这是代码:

我怎样才能访问该地址?

0 投票
2 回答
325 浏览

.net - 如何将一个 IntPtr 分配给另一个 IntPtr

我正在尝试使用 BitmapData 类?并且在将 IntPtr 值分配给 BitmapData.Scan0 属性时遇到一些问题。这是我的代码:

但是,解锁图像后,它不会改变。为什么?在调试模式下,我看到 data.Scan0 更改为 rh.data.Scan0HGlobal 值。在 rh.data.Scan0HGlobal 我有指向内存的指针,其中包含像素的原始数据。

0 投票
1 回答
3697 浏览

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() 调用吗?

0 投票
1 回答
1674 浏览

c# - 如何在 C# 中将 IntPtr 转换为 Boolean[]?

背景资料

我在 C 中有一个函数,它返回一个void*.

我开始测试两个项目之间的转换,将true或分配false给指针,回到 C# 中,我得到了IntPtr,我使用了该IntPtr.ToPointer()函数,然后将其转换为一个字节,根据我读到的内容,这相当于 c# 中的布尔值.

这对我来说很好。

DLL 导入:

使用功能:

问题
当我尝试做同样的事情但将一个布尔数组分配给指针时,我无法在 C# 中将其取回。

这就是 C 中的函数的样子

我在 C# 中尝试做的事情:

(1) 我尝试了相同的“强制转换”,这次是字节数组。这给了我一个空引用异常:

(2)因为那没有用,经过一些研究,我尝试了这个Marshal.Copy函数,将我的指针复制到一个字节数组。尽管这一次我没有得到任何异常,但我没有得到正确的结果。我的意思是,例如,如果数组的第一个布尔值是假的,我就会得到真。

这是 C# 代码的样子:

问题
所以我的问题是从 C# 中的 IntPtr 转换为布尔数组的正确方法是什么?

0 投票
3 回答
4824 浏览

c# - C# 从 C malloc 中释放 IntPtr

我在 C 上有一个带有 func 的非托管 DLL:

在这个函数中我有

在 C# 中我导入它

并称它为

如何释放 char* 或 IntPtr?

Marshal.FreeHGlobal(IntPtr) 和 Marshal.FreeCoTaskMem(IntPtr) 不起作用。

0 投票
2 回答
3526 浏览

c# - C#从窗口句柄获取父进程

我有一个 C# windows 应用程序,并最终从互操作组件启动一个对话框。问题是这个对话窗口有时会出现在 c# 应用程序的主窗口后面,迫使用户使用 alt-tab 来找到它。

我已经采取措施找到这个对话窗口并将其提出来......

...但是“找到”对话框是有问题的,因为对话框的 className 和表单标题发生了变化。

但是,对话框窗口的父进程(任务管理器>转到进程)与当前进程相同。因此,为了正确“找到”这个对话框窗口,我的目标是枚举所有窗口,找到父进程 ID 并与 CurrentProcess 进行比较。

有没有办法从窗口句柄获取整个父进程?