将 IntPtr 转换为对象 C#

本文关键字:对象 转换 IntPtr | 更新日期: 2023-09-27 18:33:22

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

#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 应用程序中的同一对象。我怎样才能做到这一点?谢谢!!

将 IntPtr 转换为对象 C#

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

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