问题标签 [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 投票
4 回答
25781 浏览

c# - 可以在不执行 Marshal.Copy 的情况下将 IntPtr 转换为字节数组吗?

我想从 IntPtr 指针获取数据到字节数组中。我可以使用以下代码来做到这一点:

但是上面的代码强制从 IntPtr 到字节数组的复制操作。当有问题的数据很大时,这不是一个好的解决方案。

有没有办法将 IntPtr 转换为字节数组?例如,以下工作是否有效:

byte[] b = (byte[])intPtr

这将消除对复制操作的需要。

另外:我们如何确定 IntPtr 指向的数据长度?

0 投票
1 回答
1767 浏览

c++ - 如何让 SWIG 在 Windows 上为 intptr_t 使用 64 位整数

我想在 Windows 上使用 SWIG 来构建 64 位应用程序。我有一个类,其中有一个指向缓冲区的指针,并且因为我想与 .NET 类交互,所以指针被声明为intptr_t.

问题是标准 SWIGstdint.i假设intptr_tint(在 32 位环境中)或long(在 64 位环境中)。虽然这在 Unix 上是正确的,但在 Windows 上却是错误的。有没有人有类似的经验或任何想法如何为此创建解决方法?

我已经设置了intptr_t=>IntPtr转换所需的类型映射,它在 32 位环境中运行良好,但它在 64 位环境中截断了指针。

0 投票
3 回答
3428 浏览

c# - 在 .NET 4 中使用 IntPtr 时出现 PInvokeStackImbalance 异常?(适用于 .NET 3.5)

可能是一个菜鸟问题,但在过去的几个小时(或几天)里,这让我陷入了困境......

我在 .NET Framework 4.0 的代码中从 DLL 调用方法

然后在这里使用它:

但是,当我在 .NET 4.0 中运行它时,我得到一个 P/INVOKE 错误,但是......在 3.5 中运行它不会触发这个错误。在我和另一个程序员检查了代码之后,我们似乎把它归结为 IntPtr 在 4.0 上运行的方式不同。

我的应用程序需要在 .NET 4.0 中运行,因为应用程序所需的一些功能仅在 4.0 中可用...

有什么我可能忽略或忘记包含的内容吗?

任何想法都非常感谢!

汤姆

更新:

原生声明:

错误:对 PInvoke 函数 'DLLTest!DLLTest.Form1::XC_GetFrameType' 的调用使堆栈不平衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。

0 投票
1 回答
4911 浏览

c# - DllImport 如何通过引用获取单个值

能够使用指针参数获取输出参数的适当签名/编组属性是什么?到目前为止,我试过这个:

以前的方法不会将值从 C 弹出到 .NET。我还尝试使用带有 IntPtr 签名的固定 GCHandle。

在这种情况下,我得到了值,但在 GCHandle.Target 上,而不是在原始规范上。这很烦人。我希望能够将规范的 intptr 固定在它自己的位置上,而不仅仅是一个副本。

使用指针返回值的适当签名是什么?是否有支持将 IntPtr 转换为 int 值的方法?

0 投票
3 回答
1100 浏览

c# - 在 C# 的结构中编组 IntPtrs

我打算建模一个 C# 类来解析我作为原始缓冲区接收的自定义协议数据。缓冲区已经作为字节数组存在。

这个解析器必须处理不同的字段布局,因此一些协议元素是 IntPtrs。

当我在将原始缓冲区映射到结构后尝试访问结构内的指针时,我遇到了访问冲突。

我做了一个简单的例子来展示关键部分:

我只是试图解决这个问题,但无济于事。据我了解, IntPtr 必须单独编组,但我没有找到任何提示如何以干净的方式完成此操作。

欢迎任何指点。感谢您的时间。

0 投票
0 回答
131 浏览

c# - 如果仅知道 IntPtr,则将对象复制到剪贴板

对不起,我的英语不好。

我只知道 IntPtr 值,但我不知道对象的类型和大小。

  1. 如何将它的对象复制到剪贴板?
  2. 我可以得到它的对象大小和/或类型吗?

问候

0 投票
1 回答
1307 浏览

c# - 为什么不能比较 IntPtr.Zero 和 default(IntPtr)?

我刚刚了解到 IntPtr.Zero 无法与默认值(IntPtr)进行比较的艰难方法。有人能告诉我为什么吗?

0 投票
1 回答
1010 浏览

c# - 将 FileStream 传递给 IntPtr 缓冲区

我在尝试使用 IntPtr 直接从硬盘驱动器读取文件时遇到问题,目前我正在通过首先使用 FileStream 将其传递给字节数组,然后将字节数组复制到 IntPtr 来读取它。但是这种方法在处理大文件时会导致溢出。这就是为什么我现在尝试使用 IntPtr 从硬盘驱动器直接读取文件,但我还没有找到一种方法来做到这一点。

0 投票
1 回答
437 浏览

c# - 无法在 C# 中取消引用 IntPtr

我编写了一个在 COM 中实现 IGroupPolicyObject 接口的类。现在,其中一种方法在 C# 中返回 IntPtr 对象:

我想在使用属于 Microsot.Win32 命名空间的 RegistryKey 对象时取消引用该指针。

这不起作用:

我找不到如何取消引用 IntPtr。有人可以帮忙吗?

谢谢

0 投票
1 回答
966 浏览

c++ - c++ 到 VB.Net IntPtr 字符串

好的,所以我有这个代码,我将它传递给一个非托管 dll,我只知道导出,并且有一些示例代码。我得到了正确的字符串,但后面是垃圾字节。

我基本上是从没有这个问题的 c++ 示例程序中逐字翻译代码。我假设我在这里缺少一些基本的东西,所以如果有人能告诉我那是什么,我将不胜感激。

示例 C++ 代码

这段代码吐出这个܉Òdÿo 

这是我的 VB.Net 代码

这段代码吐了出来

܉Òdÿo ålUäÙålUäÙålUäÙålUäÙålUäÙålUäÙålUäÙ

所以我得到了正确的字符串,但后面跟着一串重复的垃圾字符。我希望我在这里做了一些公然错误的事情,但是我尝试将数据作为字节和字符提取,并以许多不同的方法进行转换,但我似乎无法摆脱这些字符......还有,ExtractDat不返回字符串的长度(不是问题,因为它不应该,这真的很烦人)。