問題タブ [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]の式にインデックスを適用できません

実装したいコードスニペットが見つかりました。ここで、1つの関数が実行されていないという問題があります。タイプ'IntPtr'の式にインデックスを適用できません

クリスよろしく

0 投票する
2 に答える
8029 参照

c# - ハンドルは何ですか?IntPtr

私はIntPtrを読んでいて、それがハンドルを表すために使用されていることを読みました。これは正確にはどういう意味ですか?簡単な説明だと思いますが、現時点では電球が点灯していません。

0 投票する
1 に答える
1289 参照

c# - C# 実行中の別のアプリケーション ウィンドウのプロパティを変更する

実行中のプログラムの IntPtr がある場合、そのウィンドウに関するプロパティを変更する方法はありますか?たとえば、FormBorderStyle、ShowInTaskbar、さらには BackColor などのプロパティはありますか?

私は C# にかなり慣れていないので、そのようなことが可能かどうか本当に興味があります。

お時間をいただきありがとうございます。

0 投票する
1 に答える
331 参照

c# - 64 ビット プラットフォームで適切に実行されないアンマネージ コード

CodeProjectで見つけたビデオからフレームをキャプチャするコードを使用しています

コードは 32 ビットで問題なく動作しますが、64 ビット システムで実行しようとすると問題が発生します。

スローされる例外は、「AccessViolationException: 保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています」です。

私は32ビットと64ビットのプラットフォームでデバッグし、問題がどこにあるかを見つけました-

2 行目で mediaType の内容を調べたところ、32 を超える 64 ビットでは完全に異なるため、次の行で例外がスローされます (mediaType.formatPtr の値が異なります)。

問題は、2 つのプラットフォーム (4 バイトと 8 バイト) でサイズが異なる "IntPtr" 型にあると思います。この問題を解決する方法がわかりません。

事前に感謝します、リラン。

0 投票する
1 に答える
218 参照

.net - ポインタからバッファを取得する

これは、最後のエラーをバッファに取得するために取得したコードですが、IntPtrを読み取り可能なものに変換する方法がわかりません...長い数値を取得するだけです。

これはマニュアルからです:

説明現在のスレッドで発生した最後のBSAPIエラーに関する追加情報を取得します。

ppErrorMessage出力時に、これはテキストメッセージを含むゼロで終了する文字列を含むバッファを指すように設定されます。

メッセージが提供されない場合、メッセージは空の文字列を指しているため、呼び出し元はNULLをチェックする必要はありません。

バッファはBSAPIによって管理されます。ABSFreeを使用して解放しないでください。バッファは、他のBSAPI呼び出しが同じスレッドで実行されるまでのみ有効であることに注意してください。次の呼び出しの後、バッファはBSAPIによって解放または再利用される場合があります。メッセージを覚えておく必要がある場合は、それを自分のバッファにコピーする必要があります。

0 投票する
3 に答える
14513 参照

.net - オブジェクトからIntPtrポインタを取得するにはどうすればよいですか

私は指紋デバイスに取り組んでいます。製造元(Upek)からc ++ BSAPI.dllが提供されたため、これを.netで機能させるにはラッパーを使用する必要があります。

私はメモリ内からすべてを処理することができ、指紋をつかんで一致させることができました。

今、私はデータをファイルに取り出してからそれをメモリにロードしてIntPtrを取得しようとして立ち往生しています。

ここに、ファイルからエクスポートおよびインポートする方法に関するc++サンプルがあります。でも読み方がわかりません。

助けていただければ幸いですありがとうございました


これは私が持っているものであり、うまく機能します: ここに画像の説明を入力してください

今私は2つのものが必要です1.そのbufBIRをデータベースに保存します。2.保存したデータを取得し、abs_verifyに渡します。

これはどのように行うことができますか?

0 投票する
4 に答える
24192 参照

c# - C# での適切な IntPtr の使用

本当によくわかりませんが、IntPtr の使用法は理解していると思います。

MSDN から IDisposable パターンをコピーして、そこから何が得られるかを確認しました。ほとんどの部分は理解していますが、IntPtr を適切に実装する方法がわかりません。 」へ、または参照。その上、整数、文字列、char、double などを IntPtr に代入またはキャストして、そこからポインターを作成する方法さえわかりません。

また、IntPtr では安全でないコードを使用する必要がありますか?

とにかく、ここに私が話していることの絵を描くためのいくつかのコードがあります:

また、ここのコンポーネントの要点を正確に誰か教えてもらえますか? 私もこの概念に頭を悩ませています。

0 投票する
1 に答える
5851 参照

c# - プロセスが使用するすべてのメモリアドレス空間を取得するには?

プロセスによって使用されるすべてのメモリ アドレス空間を知る必要があります。メモリ空間は後でスキャンされ、プロセス内の値が特定され、その場所/アドレスが特定されます。これに対する私の現在のプロセスは、各モジュールのベース アドレスを (ベース アドレス + メモリ サイズ) で取得することです。

既知のアドレスで既知の値を持つプロセスでこれをテストしています。その特定のアドレスを調べると、期待どおりの値が得られます。ただし、プロセスで使用されるすべてのアドレス空間をスキャンすると (私が信じているもの)、どこにも値が見つかりません。

0x0CF8DC380x0CF8DDDCに「4143000」という数値が存在することがわかっています。ReadMemoryBytes(module, module.BaseAddress, 4, (IntPtr)(0x0CF8DC38))を呼び出すと、バイト (152, 55, 63, 0) が返されます。BitConverter.GetBytes(4143000) を呼び出すと、同じバイト セットが返されます。そのプロセスで別のメモリ スキャナを使用すると、それらのアドレスでその値が見つかります。

ただし、「既知のアドレス」をスキャンすると、この値がどこにも見つかりません。私のコードは、プロセスで使用されているアドレスを見つけているようには見えません。

したがって、私の質問は 2 つあります。

  • このプロセス内でこれらのアドレスを見つけるにはどうすればよいですか?
  • システムメモリ内の絶対アドレスとプロセス内の相対アドレスを扱っているのではないかと心配しています。私はこれを正しく行っていますか?

.

0 投票する
4 に答える
54774 参照

c - なぜ/いつCで型キャストに`intptr_t`を使用するのですか?

使用との使用について質問がありintptr_tますlong int。メモリアドレスのインクリメント(手動ポインタ演算など)はデータ型によって異なることを確認しました。たとえば、charポインタをインクリメントするとメモリアドレスに1が追加され、intポインタをインクリメントするとdoubleの場合は4、8、longdoubleの場合は16などが追加されます。

最初、私はこのようなことをしました:

これは正常にコンパイルおよび実行されましたが、XCodeは、型キャストに対して「ポインターから異なるサイズの整数にキャストします」という警告を出しました。

いくつかのグーグルとビンビンの後(後者はまだ言葉ですか?)、私は何人かの人々が使用を勧めるのを見ましたintptr_t

..。

これは確かにエラーを解決します。だから、これからはポインタの型キャストに使うべきだと思ったのですが…でも、そわそわした後、次のように置き換えるだけでintptr_t問題を解決できることがわかりました。intlong int

だから私の質問は、なぜintptr_t有用なのか、そしていつそれを使うべきなのかということです。この場合は不要のようです。明らかに、メモリアドレスmyCharmyFloatは大きすぎて収まりませんでしたint...したがって、それらを型キャストしてlong int問題を解決しました。

メモリアドレスが大きすぎることもありますlong intか?今考えてみると、RAMが4GBを超える場合は可能だと思います。その場合、メモリアドレスは2 ^ 32-1(unsigned long intの最大値...)を超える可能性がありますが、Cはそれよりずっと前に作成されました。想像できますよね?それとも彼らはその先見の明がありましたか?

ありがとう!