我一直在尝试在使用.NET 7开发的WPF应用程序中使用此代码。
[DllImport("user32.dll")]
internal static extern bool InsertMenu(IntPtr Menu, Int32 Position, Int32 Flags, Int32 IDNewItem, string NewItem);
但是我收到 SYSLIB1054 消息:“用 'LibraryImportAttribute' 而不是 'DllImportAttribute' 标记方法 'InsertMenu',以在编译时生成 P/Invoke 编组代码”
我更改了代码如下
[LibraryImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static partial bool InsertMenu(IntPtr Menu, Int32 Position, Int32 Flags, Int32 IDNewItem, [MarshalAs(UnmanagedType.LPUTF8Str)] string NewItem);
然后我收到此错误:“无法在 DLL 'user32.dll' 中找到名为 'InsertMenu' 的入口点。”
我该如何解决这个问题?
要升级与字符集相关的DllImport函数,首先将字符集属性指定为Unicode:
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
接下来选择第二个建议:
然后你会得到:
[LibraryImport("user32.dll", EntryPoint = "InsertMenuW", StringMarshalling = StringMarshalling.Utf16)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static partial bool InsertMenu(IntPtr Menu, Int32 Position, Int32 Flags, Int32 IDNewItem, string NewItem);
如果要调用ANSI版本,流程同上。