問題タブ [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++ - Windows で SWIG が intptr_t に 64 ビット整数を使用するようにする方法

Windows で SWIG を使用して 64 ビット アプリケーションを構築したいと考えています。バッファーへのポインターを含むクラスがあり、.NET クラスとやり取りしたいので、ポインターは として宣言されていintptr_tます。

問題は、標準の SWIGが(32 ビット環境の場合) または(64 ビット環境の場合) のいずれかstdint.iであると想定していることです。これは Unix では当てはまりますが、Windows では当てはまりません。誰かが同様の経験を持っているか、これに対する回避策を作成する方法を考えていますか?intptr_tintlong

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 でこれを実行してもこのエラーは発生しません。私と別のプログラマーがコードを調べた後、4.0 での IntPtr の動作が異なっていることが判明したようです。

アプリケーションに必要ないくつかの機能は 4.0 でしか利用できないため、私のアプリケーションは .NET 4.0 で実行する必要があります ...

私が見落としている、または単に含めるのを忘れているものはありますか?

どんな考えでも大歓迎です!

トム

アップデート:

ネイティブ宣言:

エラー: PInvoke 関数 'DLLTest!DLLTest.Form1::XC_GetFrameType' の呼び出しにより、スタックのバランスが崩れています。これは、マネージド PInvoke 署名がアンマネージド ターゲット シグネチャと一致しないことが原因である可能性があります。PInvoke シグネチャの呼び出し規約とパラメーターがターゲットのアンマネージド シグネチャと一致することを確認します。

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

c# - DllImport参照によって単一の値を取得する方法

ポインターパラメーターを使用して出力パラメーターを取得できる適切な署名/マーシャル属性は何ですか? これまでのところ、私はこれを試しました:

前のアプローチでは、値が C から .NET に戻されません。また、固定された GCHandle を IntPtr シグネチャと共に使用しようとしました。

この場合、元の基準ではなく、GCHandle.Target で値が返されました。これは迷惑です。単なるコピーではなく、標準の intptr を固定できるようにしたいと考えています。

ポインターを使用して値を返すための適切なシグネチャは何ですか? IntPtr を int 値に取得するサポートされている方法はありますか?

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

c# - C# の構造体内で IntPtr をマーシャリングする

生のバッファとして受信したカスタム プロトコル データを解析するための C# クラスをモデル化するつもりです。バッファはすでにバイト配列として手元にあります。

このパーサーはさまざまなフィールド レイアウトに対処する必要があるため、プロトコル要素の一部は IntPtrs です。

raw バッファーを構造体にマップした後、構造体内のポインターにアクセスしようとすると、アクセス違反が発生します。

重要な部分を示す簡単な例を作成しました。

私はこの問題に頭を悩ませようとしていますが、役に立ちません。私の理解では、IntPtr は個別にマーシャリングする必要がありますが、これをクリーンな方法で行う方法のヒントは見つかりません。

どんなポインタも歓迎します。お時間をいただきありがとうございます。

0 投票する
0 に答える
131 参照

c# - IntPtr のみが既知の場合、オブジェクトをクリップボードにコピー

私の悪い英語でごめんなさい。

IntPtr の値しかわかりませんが、オブジェクトの型とサイズはわかりません。

  1. オブジェクトをクリップボードにコピーするにはどうすればよいですか?
  2. オブジェクトのサイズやタイプを取得できますか?

よろしく

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

c# - IntPtr.Zeroとdefault(IntPtr)を比較できないのはなぜですか?

IntPtr.Zeroをdefault(IntPtr)と比較できないという難しい方法を学びました。誰かが理由を教えてもらえますか?

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

c# - FileStreamをIntPtrバッファーに渡す

IntPtrを使用してハードドライブからファイルを直接読み取ろうとして問題が発生しました。現在、最初にFileStreamを使用してファイルをバイト配列に渡し、次にバイト配列をIntPtrにコピーしてファイルを読み取っています。ただし、この方法では、大きなファイルを渡すときにオーバーフローが発生します。これが、IntPtrを使用してハードドライブからファイルを直接読み取ろうとしている理由ですが、これを行う方法がわかりません。

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

c# - C# で IntPtr を逆参照できない

COM で IGroupPolicyObject インターフェイスを実装するクラスを作成しました。メソッドの 1 つは、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文字列の長さを返しません(問題ではありません。想定されていないため、これは本当に面倒です)。