【发布时间】:2012-09-13 16:20:26
【问题描述】:
我正在尝试使用http://www.pinvoke.net/default.aspx/coredll/playsound.html的代码
不过,它会导致几个错误消息,即:“意外字符 '×'”26 次。
所以,我尝试将 val 更改为逐字字符串,如下所示:
SND_SYNC = @"0×0000",
...但现在我得到“无法将类型'string'隐式转换为'int'
我意识到我可以将这些字符串转换为整数,但这真的是这样吗?恐怕我可以让它以这种方式编译,但它仍然无法工作(或更糟)。将这些十六进制值标记为这样的适当方法是什么,以便编译器接受它们?
这是代码的第一部分:
[DllImport("winmm.dll", SetLastError = true)] static extern bool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound);
[Flags]
public enum SoundFlags
{
SND_SYNC = 0×0000, // <- "unexpected char 'x'"
【问题讨论】:
-
我一定错过了什么。为什么不在 VS 编辑器中将所有
x替换为X(它们是不同的字符)。 -
你是说x应该大写吗?如果不是,你能举例说明你的意思吗?
-
当我将链接中的示例代码中的代码复制并粘贴到我的 Visual Studio 环境时,我没有收到任何错误。您确定这段代码上方没有其他问题可能导致所有这些问题吗?
-
不,我说他们不是
X(88 或120)。他们的代码是 215。试试这个代码var x1 = (int)'×'; var x2 = (int)'x'; -
是的,做到了 - 将小写的 x 更改为大写的 x 解决了问题 - 并且代码非常有效/就像魅力一样!为什么会出现这种混乱和不一致,我不知道,但我很高兴它现在可以通过如此简单的修复工作。
标签: c# enums flags winmm enum-flags