C# InsertMenuItem将字符串截断为第一个字符

C# InsertMenuItem将字符串截断为第一个字符,c#,menu,C#,Menu,我试图使用InsertMenuItem(而不是InsertMenuItem)修改窗口的系统菜单,原因是我希望最终插入子菜单。语言是C# 尝试插入一个新项目,尝试获取现有项目并重新插入,它将插入,但项目字符串仅作为第一个字符显示在菜单中。有人知道我遗漏了什么吗 // try creating one from scratch MENUITEMINFO it = new MENUITEMINFO(); it.cbSize = (uint)Marshal

我试图使用InsertMenuItem(而不是InsertMenuItem)修改窗口的系统菜单,原因是我希望最终插入子菜单。语言是C#

尝试插入一个新项目,尝试获取现有项目并重新插入,它将插入,但项目字符串仅作为第一个字符显示在菜单中。有人知道我遗漏了什么吗

        // try creating one from scratch
        MENUITEMINFO it = new MENUITEMINFO();
        it.cbSize = (uint)Marshal.SizeOf(it);
        it.fMask = 64;// MIIM_STRING
        it.wID = 12345;
        it.dwTypeData = "Now is the time";
        it.fType = 0;
        it.cch = 0;
        InsertMenuItem(hSysMenu, 7, true, ref it);

        //try copying one
        GetMenuItemInfo(hSysMenu, (uint)0, true, ref it);
        it.cch += 10;
        it.dwTypeData = new string(' ', (int)(menuItemInfo.cch+10));
        GetMenuItemInfo(hSysMenu, (uint)0, true, ref it);
        it.wID = 123456;
        var err = InsertMenuItem(hSysMenu, 1, true, ref it);
以上代码的结果
好的,我终于明白了。我会把这个放在这里,这样当其他人对此感到困惑时,他们可能会发现它

原因是InsertMenuItem p/invoke是用

[DllImport(“user32.dll”)]位于pinvoke.net网站中-请参阅

而且它必须是

[DllImport(“user32.dll”,CharSet=CharSet.Auto)]

我更改了pinvoke.net页面以反映它