问题标签 [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# - 可以在不执行 Marshal.Copy 的情况下将 IntPtr 转换为字节数组吗?
我想从 IntPtr 指针获取数据到字节数组中。我可以使用以下代码来做到这一点:
但是上面的代码强制从 IntPtr 到字节数组的复制操作。当有问题的数据很大时,这不是一个好的解决方案。
有没有办法将 IntPtr 转换为字节数组?例如,以下工作是否有效:
byte[] b = (byte[])intPtr
这将消除对复制操作的需要。
另外:我们如何确定 IntPtr 指向的数据长度?
c++ - 如何让 SWIG 在 Windows 上为 intptr_t 使用 64 位整数
我想在 Windows 上使用 SWIG 来构建 64 位应用程序。我有一个类,其中有一个指向缓冲区的指针,并且因为我想与 .NET 类交互,所以指针被声明为intptr_t
.
问题是标准 SWIGstdint.i
假设intptr_t
是int
(在 32 位环境中)或long
(在 64 位环境中)。虽然这在 Unix 上是正确的,但在 Windows 上却是错误的。有没有人有类似的经验或任何想法如何为此创建解决方法?
我已经设置了intptr_t
=>IntPtr
转换所需的类型映射,它在 32 位环境中运行良好,但它在 64 位环境中截断了指针。
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 签名的调用约定和参数是否与目标非托管签名匹配。
c# - DllImport 如何通过引用获取单个值
能够使用指针参数获取输出参数的适当签名/编组属性是什么?到目前为止,我试过这个:
以前的方法不会将值从 C 弹出到 .NET。我还尝试使用带有 IntPtr 签名的固定 GCHandle。
在这种情况下,我得到了值,但在 GCHandle.Target 上,而不是在原始规范上。这很烦人。我希望能够将规范的 intptr 固定在它自己的位置上,而不仅仅是一个副本。
使用指针返回值的适当签名是什么?是否有支持将 IntPtr 转换为 int 值的方法?
c# - 在 C# 的结构中编组 IntPtrs
我打算建模一个 C# 类来解析我作为原始缓冲区接收的自定义协议数据。缓冲区已经作为字节数组存在。
这个解析器必须处理不同的字段布局,因此一些协议元素是 IntPtrs。
当我在将原始缓冲区映射到结构后尝试访问结构内的指针时,我遇到了访问冲突。
我做了一个简单的例子来展示关键部分:
我只是试图解决这个问题,但无济于事。据我了解, IntPtr 必须单独编组,但我没有找到任何提示如何以干净的方式完成此操作。
欢迎任何指点。感谢您的时间。
c# - 如果仅知道 IntPtr,则将对象复制到剪贴板
对不起,我的英语不好。
我只知道 IntPtr 值,但我不知道对象的类型和大小。
- 如何将它的对象复制到剪贴板?
- 我可以得到它的对象大小和/或类型吗?
问候
c# - 为什么不能比较 IntPtr.Zero 和 default(IntPtr)?
我刚刚了解到 IntPtr.Zero 无法与默认值(IntPtr)进行比较的艰难方法。有人能告诉我为什么吗?
c# - 将 FileStream 传递给 IntPtr 缓冲区
我在尝试使用 IntPtr 直接从硬盘驱动器读取文件时遇到问题,目前我正在通过首先使用 FileStream 将其传递给字节数组,然后将字节数组复制到 IntPtr 来读取它。但是这种方法在处理大文件时会导致溢出。这就是为什么我现在尝试使用 IntPtr 从硬盘驱动器直接读取文件,但我还没有找到一种方法来做到这一点。
c# - 无法在 C# 中取消引用 IntPtr
我编写了一个在 COM 中实现 IGroupPolicyObject 接口的类。现在,其中一种方法在 C# 中返回 IntPtr 对象:
我想在使用属于 Microsot.Win32 命名空间的 RegistryKey 对象时取消引用该指针。
这不起作用:
我找不到如何取消引用 IntPtr。有人可以帮忙吗?
谢谢
c++ - c++ 到 VB.Net IntPtr 字符串
好的,所以我有这个代码,我将它传递给一个非托管 dll,我只知道导出,并且有一些示例代码。我得到了正确的字符串,但后面是垃圾字节。
我基本上是从没有这个问题的 c++ 示例程序中逐字翻译代码。我假设我在这里缺少一些基本的东西,所以如果有人能告诉我那是什么,我将不胜感激。
示例 C++ 代码
这段代码吐出这个܉Òdÿo
这是我的 VB.Net 代码
这段代码吐了出来
܉Òdÿo ålUäÙålUäÙålUäÙålUäÙålUäÙålUäÙålUäÙ
所以我得到了正确的字符串,但后面跟着一串重复的垃圾字符。我希望我在这里做了一些公然错误的事情,但是我尝试将数据作为字节和字符提取,并以许多不同的方法进行转换,但我似乎无法摆脱这些字符......还有,ExtractDat
不返回字符串的长度(不是问题,因为它不应该,这真的很烦人)。