問題タブ [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++-cli - HBITMAPからビットマップ(.NET)を作成する
私はC++/ CLIを使用していて、rawHBITMAP
という名前hStrip
があります。これをで表示する必要があるPictureBox
ので、次の関数を見つけましたが、これにSystem::Drawing::Image::FromHbitmap
は、rawを渡す前IntPtr
に変換する必要があるのか、それともこのようにそれを渡すことを逃れることができますか?HBITMAP
IntPtr
変換する必要がある場合、どのように変換する必要がありますか?私は実際にこの方法で変換を見つけていません。しかし、私はそれを別の方法で見つけました。
c# - C#(フルスクリーンゲーム)でミドルスクリーンピクセル(カラー)を取得しますか?
フルスクリーンゲームを実行していて、中央のピクセルの色を見つけようとしています。ただし、私が使用しているコードは、ウィンドウ化されたアプリケーション/ゲームなどでのみ機能するようです。これは私のコードです:
私はこのようなミドルスクリーンピクセルを取得しています:
では、どうすればこのコードをフルスクリーンゲームと互換性を持たせることができますか?A = 255, R = 0, G = 0, B = 0
中央の画面のピクセルが赤であると100%肯定的ですが、ARGB値はです。
64-bit - IntPtr.ToInt32が64ビットモードでOverflowExceptionをスローし、Explicit(IntPtr to Int32)がスローしない理由
MSDNでのオペレーターの説明には、次のようなコメントがあります。
例外は、valueの値が現在のプラットフォームでサポートされているよりも多くのビットを必要とする場合にのみスローされます。
ToInt32
の説明はそうではないので、タイトルは完全に正しくないと思います(簡潔にするため)、
より正確な質問は次のようになります。「Int32に適合する値に対して64ビットモードでIntPtr.ToInt32
スローし、Explicit(IntPtr to Int32)が適合しないのはなぜですか」OverflowException
逆コンパイルIntPtr
ToInt32
すると、演算子は非常によく似ています。
何がToInt32
例外をスローするのだろうか、それは安全でないキーワードですか?
dll - PInvoke C# から C++ へ。文字列の末尾にある奇妙な文字
このトピックに関するほとんどすべての質問を読みましたが、まだ解決策がありません。
これは DLL 関数です。
私の C# アプリケーションでは、すでに文字列と StringBuilder のパラメーターを渡そうとしましたが失敗しました。この質問では、PInvoke Interop Assistant の使用が推奨され、IntPtrの使用が提案されています。これは私のラッパー C# クラスです:
いずれの場合も、結果は常に同じです: parameters.txt
これはモバイル アプリケーションなので、.NET Compact Framework 3.5 を使用しています。
助言がありますか?お時間をいただきありがとうございます。
c# - 32ビットメモリアドレスへのアクセスc#
32ビットアドレスにアクセスしようとしていますが、IntPtrを作成すると、OverflowExceptionがスローされます。コードは次のとおりです。
そのアドレスにアクセスするにはどうすればよいですか?
.net - 1 つの IntPtr を他の IntPtr に割り当てる方法
BitmapData クラスを使用しようとしていますか? IntPtr 値を BitmapData.Scan0 プロパティに割り当てる際に問題が発生します。これが私のコードです:
しかし、画像のロックを解除した後、それは変わりません。なんで?デバッグ モードでは、data.Scan0 が rh.data.Scan0HGlobal 値に変更されていることがわかりました。rh.data.Scan0HGlobal には、ピクセルの生データを含むメモリへのポインタがあります。
windows-8 - IntPtr.ToInt32() および x64 システム
私の c# dll には、いくつかのアンマネージ dll とやり取りするための次のようなコードがあります。
Windows 8をインストールする前に、x64システムで.Net2および.Net4を使用してAnyCPUでコンパイルされた私のdllを使用すると、これは常に正常に機能しました。
Windows 8 で .Net4 dll を使用すると、buffer.ToInt32() 呼び出しで OverFlowException (「算術演算の結果、オーバーフローが発生しました。」) が発生します。
IntPtr.ToInt32() の MSDN ドキュメントには、次のように書かれています。
「OverflowException: 64 ビット プラットフォームでは、このインスタンスの値が大きすぎるか小さすぎて、32 ビットの符号付き整数として表すことができません。」
なぜこの問題が Windows 8 でのみ表面化したのか、そしてそれを修正する正しい方法は何なのだろうか。
IntPtr.ToInt32() 呼び出しの代わりに、このようなメソッドを使用する必要がありますか?
c# - C#でIntPtrをBoolean []に変換するにはどうすればよいですか?
背景情報
私は私にaを返すCの関数を持っていますvoid*
。
2つのプロジェクト間の変換のテストを開始し、ポインターを割り当てtrue
たりfalse
、ポインターに割り当てたりして、C#に戻りIntPtr
、関数を使用IntPtr.ToPointer()
してバイトにキャストしました。これは、読んだ内容によると、c#のブール値に相当します。 。
これは私にとってはうまくいきました。
DLLIMPORT:
関数の使用:
問題
同じことを試みたが、ブール配列をポインターに割り当てたところ、C#でそれを取り戻すことができませんでした。
これはCの関数がどのように見えるかです
私がC#でやろうとしたこと:
(1)同じ「キャスト」を、今回はバイト配列に試しました。それは私にnull参照例外を与えました:
(2)それがうまくいかなかったので、いくつかの調査の後、私はMarshal.Copy
関数を試し、ポインタをバイト配列にコピーしました。今回は例外は発生していませんが、適切な結果は得られていません。つまり、たとえば、配列の最初のブール値がfalseの場合、trueになります。
C#コードは次のようになります。
質問
それで、私の質問は、C#のIntPtrからブール配列に変換する正しい方法は何ですか?
c# - C# C の malloc から IntPtr を解放する
C に func を使用するアンマネージ DLL があります。
この機能で私は持っています
C#で私はそれをインポートします
そして、それを呼び出します
char* または IntPtr を解放するには?
Marshal.FreeHGlobal(IntPtr) と Marshal.FreeCoTaskMem(IntPtr) は機能しません。
c# - C# ウィンドウ ハンドルから親プロセスを取得する
C# Windows アプリケーションがあり、最終的に相互運用コンポーネントからダイアログを起動します。問題は、このダイアログ ウィンドウが c# アプリケーションのメイン ウィンドウの背後に表示されることがあり、ユーザーがそれを見つけるために Alt キーを押しながらタブ操作を行う必要があることです。
このダイアログウィンドウを見つけて前に出すための対策を講じました...
...しかし、ダイアログのclassNameとフォームのタイトルが変更されるため、ダイアログを「見つける」ことには問題があります。
ただし、ダイアログ ウィンドウの親プロセス ([タスク マネージャー] > [プロセスに移動]) は、現在のプロセスと同じです。したがって、このダイアログ ウィンドウを正しく「見つける」ために、私の目的は、すべてのウィンドウを列挙し、親プロセス ID を見つけて、CurrentProcess と比較することです。
ウィンドウ ハンドルから親プロセス全体を取得する方法はありますか?