問題タブ [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 に答える
1126 参照

c# - API呼び出しのSafeProcessHandleとIntPtrの違い

WinAPIを使用しているときに、C#アプリケーションにGetProcessAfinityMaskの呼び出しを実装することにしました。ただし、この関数には2つの異なるシグネチャがあります。

それらの1つはSafeProcessHandleハンドルに使用します:

他の可能なバージョン(P / Invoke)は以下を使用しますIntPtr

両方の関数が同じ値を返すとすると、インスタンスを渡すことと、SafeProcessHandleインスタンスを渡すことの違いは何IntPtrですか?

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

c# - XmlSerializer を使用して IntPtr をシリアル化する

なぜ IntPtr 型が XmlSerializer 実装でサポートされていないのか疑問に思っています。IntPtr 型のフィールドを含むクラスをシリアル化しようとすると、IntPtr がサポートされていないというメッセージが表示されてシリアル化が失敗し、そのメンバーは無視されます。

これを回避するには、IntPtr 値を Int64 に変換します... しかし、それは良い考えですか? 私が考える限り、そうあるべきです。具体的には、.NET フレームワークで IntPtr と入力されるウィンドウ ハンドルをシリアル化する必要があります。私は正しいことをしていますか?

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

c# - Windows メッセージでの IntPtr から String への変換

ウィンドウメッセージをフックして困っています。ウィンドウのテキスト (キャプション) の変更を検出する必要があるため、対象のウィンドウの WM_SETTEXT メッセージをインターセプトします (ウィンドウの作成時にウィンドウのキャプションが指定されていないため、これを行います)。

WM_SETTEXTドキュメントのドキュメントを読むと、 lParamパラメータはウィンドウ テキストを表す文字列へのポインタを指定します。

メッセージは、SendMessage を使用して .NET アプリケーションに転送されます。.NET アプリケーションで行うことは次のとおりです。

ここで、ProcessMessage は、.NET フォームのメッセージを処理するルーチンです。

私がいつも得るのは空の文字列です。これは期待される結果ではありません。他の Marshal.PtrToString* メソッドを試しましたが、誰も機能しませんでした。

IntPtrからStringへの変換で何が間違っていますか?

(*) すべての Windows メッセージが傍受されるため、システム全体がブロックされるため、このコードをデバッグできないことに注意してください。

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

c# - 管理対象外から管理対象へのconstchar*文字列の受け渡し

2つの通信コンポーネントがあります。1つは管理対象、もう1つは管理対象外です。管理対象は、管理対象外の実装から文字列(同じ文字列または単なるコピー)を取得する必要があります。次のコードを試しました。

ただし、testStrの値は期待どおりではありません。私がここで間違っていることを誰かが知っていますか?どんな提案も本当に役に立ちます。

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

c++ - エラー:「Foo*」から「unsignedint」へのキャストは精度を失います

int(またはunsigned int)へのポインターをキャストしようとしていますが、何を試しても機能しません。

、、およびCスタイルのキャスト、's、 ' sのさまざまな組み合わせを試しましたがstatic_cast<intptr_t>(obj)、stdint.hを含めています。私が読んだことから、私が試した多くのことの1つはうまくいくはずです。何が得られますか?reinterpret_cast<intptr_t>(obj)intptr_tunsigned int

私が説明したとおりのコードであるため、わざわざコードを含めることはしませんでしたが、あなたが尋ねたので、これらすべてに加えて他の組み合わせを試しました。

それらはすべてまったく同じエラーを出します。

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

c# - ポインターを返す C++ メソッドを呼び出す C#。メモリ管理について説明する

以下の「メイン」の2つのC#行で、低レベル/メモリ管理の観点から正確に何が起こっているのか説明できますか?

C++ コード (アンマネージ):

C# コード:

具体的には、「myClass」に割り当てるスペースを .NET がどのように認識しているのか疑問に思っています。バックグラウンドで何らかの「Marshal.AllocHGlobal(SIZE)」を実行しているはずですよね?より多くのスペースが必要な場合 (名前を設定しますか?) はどうなりますか? また、ガベージコレクションが発生してメモリが移動し、「IntPtr myClass」が台無しになるリスクはありますか?

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

c# - 新しいIntPtr.Addメソッド-intのポイントが欠落していますか?

FW 4.0以降、IntPtr構造には次のAddメソッドがあります。

IntPtrこれは、私たちが持っていた数学に関するすべての質問(1、2、おそらくそれ以上)に対処することになっているので、素晴らしいことです

しかし、なぜoffset intですか?
そうではないIntPtrでしょうか?範囲を超える値で64ビットポインタをオフセットすることは容易に想像できintます。


たとえば、次のことを考慮してMarshal.OffsetOfください。

IntPtr構造体メンバーへのオフセットとしてを返します。これは完全に理にかなっています!Addまた、このオフセットを新しい方法で簡単に使用することはできません。にキャストしてから、ループで数回Int64呼び出す必要があります。Add

IntPtr.Sizeまた、適切に作成されたアプリケーションとは無関係であるという考えそのものを殺しているようです。オフセットをなどの特定のタイプにキャストするInt64必要があります。その時点で、サイズの違いの管理を開始する必要があります。そして、128ビットIntPtrが表示されたときに何が起こるかを想像してください。


ここでの私の質問は、なぜですか?
私は結論を正しているのでしょうか、それとも要点を見逃しているのでしょうか。

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

c# - どちらを使用するのが良い/安全か:HandleRefまたはIntPtr(Microsoftの新しいソースコードはHandleRefを使用しなくなりました)

たとえば、古い.NET Framework 2.0ソースコード(Windowsフォーム、Visual Studio 2005-Whidbey)では、 GetClientRect関数はHandleRefを使用して定義されていました

新しいWindowsAPIコードパック(Microsoft、2009/2010から)では、同じ関数がIntPtrを使用して定義されています。

実際、 HandleRefはWindows APIコードパックのソースファイルでは使用されていませんが、古い.NETFrameworkソースファイルのネイティブメソッドの署名では頻繁に使用されていました。

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

c# - IntPtrからバイト配列へおよび戻る

C#でbyte[]からIntPtrを取得する方法を参照する

IntPtrが参照しているデータをバイト[]に読み込んでから、別のIntPtrに戻そうとしています。ポインターはスキャナーデバイスからキャプチャされた画像を参照しているため、この情報のキャプチャはバイト配列に配置する必要があると仮定しました。

また、Marshal.SizeOf()メソッドが、IntPtrが参照しているデータのサイズを返すのか、ポインター自体のサイズを返すのかはわかりません。

私の問題は、「タイプ'System.Byte[]'をアンマネージ構造としてマーシャリングできません。意味のあるサイズまたはオフセットを計算できません」というエラーが表示されることです。

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

interop - ref、nullポインター、およびIntPtrによる構造体の受け渡しに関する相互運用の質問

同僚、

前文。私の質問は、ベストプラクティスについてです。私は1つの回避策を知っています。C#で相互運用機能を処理する必要があるのはこれが初めてですが、同時にCとC++でかなりの量のコードを記述しました。

アンマネージDLLによって公開されている関数を2回呼び出す必要があります。この関数は、構造体へのポインターを引数として取ります。null初めてポインタを渡す必要があります。2回目は、構造体のインスタンスへのポインターを渡す必要があります。

この関数には6つのパラメーターがあるため、この質問の目的で機能する簡略化された宣言を以下に示します。(誰かが興味を持っているなら、私は詳細を投稿することができます。)これが宣言の最初の変形です:

に強く型付けされているので、私はそれが好きNEEDED_STRUCT_TYPEです。しかし、nullポインターを渡すことができるようにするには、宣言を次のように変更する必要がありました。

IntPtr.Zeroこれでポインタを渡すことができnullますが、パラメータは強く型付けされなくなりました。与えられた状況で、強く型付けされたパラメーターとnullポインターを渡す機能の両方を持つ方法はありますか?

どんな提案、洞察または参照も本当にありがたいです!

乾杯、
-ニック