如何解决LibraryImport问题?

问题描述 投票:0回答:1

我一直在尝试在使用.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' 的入口点。”

我该如何解决这个问题?

c# interop
1个回答
0
投票

要升级与字符集相关的DllImport函数,首先将字符集属性指定为Unicode:

[DllImport("user32.dll", CharSet = CharSet.Unicode)]

接下来选择第二个建议:

  • 转换为带有“W”后缀的“LibraryImport”

然后你会得到:

[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版本,流程同上。

© www.soinside.com 2019 - 2024. All rights reserved.