我正在将一些 Win32 代码移植到 C#,并且遇到了几个具有相同名称并使用相同结构的函数,只是它们以 A 和 W 结尾
例如:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("shell32.dll", CallingConvention = CallingConvention.StdCall)]
public static extern bool Shell_NotifyIconA(uint dwMessage, ref NOTIFYICONDATAA lpData);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("shell32.dll", CallingConvention = CallingConvention.StdCall)]
public static extern bool Shell_NotifyIconW(uint dwMessage, ref NOTIFYICONDATAW lpData);
我在 C# 中看到了一些实现,它们在函数名称和相关结构中都省略了 A 和 W,如下所示:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("shell32.dll", CallingConvention = CallingConvention.StdCall)]
public static extern bool Shell_NotifyIcon(uint dwMessage, ref NOTIFYICONDATA lpData);
我想知道的是:
A 和 W 分别代表什么?
在 C# 中,我应该使用 A 和 W 来实现如上所示的功能,还是省略 A 和 W 以支持单一实现是更好的做法?