问题标签 [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 回答
865 浏览

c# - 无法将索引应用于“IntPtr”类型的表达式 == IntPtr ptr1 = [...] --> ptr1[0]

我找到了一个我想要实现的代码片段。现在是一个功能没有运行的问题。无法将索引应用于“IntPtr”类型的表达式

问候克里斯

0 投票
2 回答
8029 浏览

c# - 手柄有什么用?内部指针

我一直在阅读 IntPtr 并读到它用于表示句柄。这到底是什么意思?我敢肯定这是一个简单的解释,但灯泡目前没有打开..

0 投票
1 回答
1289 浏览

c# - C# 更改另一个正在运行的应用程序窗口的属性

如果我有一个正在运行的程序的 IntPtr,是否有任何方法可以更改有关该窗口的属性——例如属性,例如:FormBorderStyle、ShowInTaskbar 甚至可能是 BackColor?

我对 C# 很陌生,我真的很好奇这样的事情是否可能。

感谢您的时间和帮助!

0 投票
1 回答
331 浏览

c# - 在 64 位平台上无法正常运行的非托管代码

我正在使用从CodeProject中找到的视频中捕获帧的代码

该代码在 32 位上运行良好,当我尝试在 64 位系统上运行时问题就开始了。

抛出的异常是“AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏”

我在 32 位和 64 位平台上调试,发现问题出在哪里——

在第二行之后,我查看了 mediaType 内容,它在 64 位超过 32 时完全不同,这导致下一行抛出异常(mediaType.formatPtr 具有不同的值)

我认为问题出在“IntPtr”类型上,它在 2 个平台(4 对 8 字节)上的大小不同,问题是我不知道如何克服这个问题。

任何形式的帮助都会很好,在此先感谢 Liran。

0 投票
1 回答
218 浏览

.net - 从指针获取缓冲区

这是我将最后一个错误放入缓冲区的代码,但我不知道如何将 IntPtr 转换为我可以读取的内容......我只是得到一个长数字。

这是来自手册:

描述 检索有关在当前线程中发生的最后一个 BSAPI 错误的附加信息。

ppErrorMessage 在输出上,它被设置为指向一个缓冲区,该缓冲区包含带有文本消息的以零结尾的字符串。

如果没有提供消息,它指向空字符串,因此调用者不需要检查它是否为 NULL。

缓冲区由 BSAPI 管理;不要使用 ABSFree 来释放它。请注意,缓冲区仅在同一线程中执行其他 BSAPI 调用之前有效。在下一次调用之后,缓冲区可能会被 BSAPI 释放或重用。如果您需要记住该消息,则必须将其复制到您自己的缓冲区中。

0 投票
3 回答
14513 浏览

.net - 如何从对象中获取 IntPtr 指针

我正在开发指纹设备,制造商(Upek)给了我一个 c++ BSAPI.dll,所以我需要使用包装器来让它在.net 中工作。

我可以在内存中处理这一切,我可以抓取并匹配指纹。

现在我一直在尝试将数据导出到文件中,然后将其加载回内存并获取 IntPtr。

这里有一个关于如何从文件导出和导入的 c++ 示例。但我不知道怎么读。

感谢任何帮助谢谢大家


这就是我所拥有的并且效果很好: 在此处输入图像描述

现在我需要两件事 1. 将那个 bufBIR 保存到数据库中。2. 把我保存的数据传给abs_verify。

如何才能做到这一点?

0 投票
4 回答
15992 浏览

c# - DLLImport -> 如何在 C# 中处理句柄

在我的 C# 代码中,我想导入一个 C++ DLL。我使用 dllimport,它可以很好地处理一些功能。但是在一个函数中,我得到了一个 HANDLE,稍后我需要调用另一个函数。

在我的代码中,这些函数的调用方式如下:

如果我这样做,我会得到一个“System.AccessViolationException”。我在这里和互联网上搜索过,但没有找到具体的答案。如何正确使用 IntPtr,使其正常工作?最好的祝福

托比

0 投票
4 回答
24192 浏览

c# - 在 C# 中正确使用 IntPtr

我了解 IntPtr 的使用,尽管我真的不确定。

我从 MSDN 复制了 IDisposable 模式只是为了看看我能从中得到什么,虽然我大部分都理解它,但我不知道如何正确实现 IntPtr,甚至不知道它应该“指向什么” “到,或参考。最重要的是,我什至不知道如何将整数、字符串、字符、双精度等分配或强制转换为 IntPtr 以从中创建指针。

另外,IntPtr 是否需要使用不安全的代码?

无论如何,这里有一些代码只是为了描绘我正在谈论的内容:

另外,有人能告诉我这里组件的意义是什么吗?我也很难理解这个概念。

0 投票
1 回答
5851 浏览

c# - 如何获取进程使用的所有内存地址空间?

我需要知道进程使用的所有内存地址空间。稍后将扫描内存空间以定位进程中的值并识别它们的位置/地址。我目前的过程是通过它的(基地址+内存大小)获取每个模块的基地址。

我在一个已知地址上具有已知值的进程上对此进行测试。当我查找该特定地址时,我得到了我期望的值。但是,当我扫描(我认为是)进程使用的所有地址空间时,我在任何地方都找不到该值。

我知道数值“4143000”存在于0x0CF8DC380x0CF8DDDC。当我调用ReadMemoryBytes(module, module.BaseAddress, 4, (IntPtr)(0x0CF8DC38)) 时,我得到了字节(152、55、63、0)。当我调用 BitConverter.GetBytes(4143000) 时,我得到了相同的字节集。当我在该进程上使用不同的内存扫描仪时,我会在这些地址上找到该值。

但是,当我扫描“已知地址”时,我在任何地方都找不到这个值。看起来我的代码甚至没有找到进程正在使用的那些地址。

因此,我的问题是双重的:

  • 如何在此过程中找到这些地址?
  • 我担心我可能正在处理系统内存中的绝对地址与进程中的相对地址。我这样做对吗?

.

0 投票
4 回答
54774 浏览

c - 为什么/何时使用 `intptr_t` 在 C 中进行类型转换?

我有一个关于使用intptr_tvs.的问题long int。我观察到递增内存地址(例如通过手动指针算法)因数据类型而异。例如,增加一个 char 指针会将 1 添加到内存地址,而增加一个 int 指针会增加 4、8 用于双精度,16 用于长双精度等等......

起初我做了这样的事情:

它编译和执行得很好,但是 XCode 给了我关于类型转换的警告:“从指针转换为不同大小的整数。”

经过一些谷歌搜索和搜索(后者是一个词吗?),我看到有人推荐使用intptr_t

...

这确实解决了错误。所以,我想,从现在开始,我应该使用intptr_t类型转换指针......但是经过一番烦躁之后,我发现我可以通过替换来解决int问题long int

所以我的问题是,为什么intptr_t有用,什么时候应该使用?在这种情况下,这似乎是多余的。显然, 和 的内存地址myChar太大myFloat而无法放入int... 所以将它们类型转换为long ints 解决了这个问题。

是不是有时内存地址也太大了long int?现在我考虑了一下,我想如果你有 > 4GB 的 RAM,这是可能的,在这种情况下,内存地址可能超过 2^32 - 1(无符号长整数的最大值......)但 C 早在那之前就被创建了可以想象,对吧?还是他们有那么有先见之明?

谢谢!