VirtualAllocExを呼び出す必要があり、IntPtr が返されます。その関数を呼び出して空のアドレスを取得し、コードケーブをそこに記述できるようにします (これは別のプロセスにあります)。
結果を UInt32 に変換するにはどうすればよいですか?そのアドレスで最近 WriteProcessMemory() を呼び出すことができますか?
VirtualAllocExを呼び出す必要があり、IntPtr が返されます。その関数を呼び出して空のアドレスを取得し、コードケーブをそこに記述できるようにします (これは別のプロセスにあります)。
結果を UInt32 に変換するにはどうすればよいですか?そのアドレスで最近 WriteProcessMemory() を呼び出すことができますか?
WriteProcessMemory を呼び出すときは、アドレスとして UInt32 ではなく IntPtr を渡す必要があります (WriteProcessMemory は整数ではなくポインターを想定しているため)。そのため、VirtualAllocEx によって返された IntPtr を UInt32 に変換しなくても直接使用できるはずです。
(uint)ptr でキャストできます (うまくキャストできない場合は、最初に ptr.ToInt32() または ToInt64() を試してください。少なくとも、このアプローチの問題は知りません。 UInt32 の範囲が Int32 よりも大きく、非負側では Int64 と同じであることを考えると、それで十分なはずです。
Int32 が 64 ビット アーキテクチャでどのように動作するかはわかりませんが。IntPtr の理由は、ポインタを格納するプラットフォームに依存しない方法を提供するためだと思います。
WriteProcessMemory の DLlImport が正しくありません。ベース アドレスはポインターであるため、IntPtr として定義する必要があります。
DllImport ステートメントを修正する必要があります。