C#SendMessage到C WinProc

我需要从C#发送一个字符串到C WindowProc.关于SO的一些相关问题与此相关,但没有一个答案对我有用.情况如下:

PInvoke:
[DllImport("user32", CharSet = CharSet.Auto)]
public extern static int SendMessage(IntPtr hWnd, uint wMsg, IntPtr wParam, string lParam);

C#:
string lparam = "abc";
NativeMethods.User32.SendMessage(handle, ConnectMsg, IntPtr.Zero, lparam);

C++:
API LRESULT CALLBACK HookProc (int code, WPARAM wParam, LPARAM lParam)
{       
    if (code >= 0)
    {
        CWPSTRUCT* cwp = (CWPSTRUCT*)lParam;
                ...
        (LPWSTR)cwp->lParam   <-- BadPtr
                ...
    }

    return ::CallNextHookEx(0, code, wParam, lParam);
}

我已经尝试了许多不同的东西,将字符串编组为LPStr,LPWStr,也尝试从非托管内存创建IntPtr,并使用Marshal.WriteByte写入它.

指针是C端的正确内存位置,但数据不存在.我错过了什么?

解决方法:

对于C LPWSTR或LPSTR参数,您需要在DllImport中使用C#StringBuilder.

对于C LPCWSTR或LPCSTR参数,您需要在DllImport中使用C#字符串.

上一篇:[网站公告]17:55-18:20阿里云SLB故障造成网站不能正常访问


下一篇:【论文阅读】Realistic Facial Expression Reconstruction for VR HMD Users