将 IntPtr 转换为对象 C#

Posted

技术标签:

【中文标题】将 IntPtr 转换为对象 C#【英文标题】:Convert IntPtr to an object C# 【发布时间】:2014-12-05 08:18:02 【问题描述】:

从我的旧应用程序(在单独的进程下运行)我在这样的对象中发送双精度值

#define MYMESSAGECODE (WM_APP + 123 )
typedef struct

    float f;
    double d;
 MyDataStruct;

MyDataStruct data;
data.f = 1.0;
data.d = 2.0;
pWpfWnd->SendMessage( MYMESSAGECODE, 0, (LPARAM) &data );

这是在一个单独的进程中的 WndProc 中接收的,就像这样

private IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)

      switch (msg)
      
           case GA_SLOT_COORDINATES:
           // Need solution here to convert lParam to MyDataStruct
      
      return IntPtr.Zero;

我想将 lParam 中传递的数据从我的旧应用程序转换为在不同进程下运行的 .Net 应用程序中的相同对象。我怎样才能做到这一点?谢谢!!

【问题讨论】:

【参考方案1】:

如果你是进程内Marshal.PtrToStructure会帮助你。

您似乎正在尝试在整个过程中执行此操作,这是不可能的。您的LParam 是指向另一个进程中的内存的指针,您不能像那样共享内存。您需要使用任何 Inter process communication 技术。看看Wm_CopyData。

【讨论】:

以上是关于将 IntPtr 转换为对象 C#的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将 CodeElements 编组到 IntPtr

C# 如何从 IntPtr 获取 Byte[]

C 缓冲区到 C# 位图对象

C# 怎么将ushort数组里面的数据拷贝到IntPtr里面去啊

如何通过 IntPtr 将 c++ 数组编组为 c#

将 C# 对象转换为 Json 对象