【问题标题】:Linking to winmm.dll in Visual Studio 2013 Express for mciSendString在 Visual Studio 2013 Express 中为 mciSendString 链接到 winmm.dll
【发布时间】:2014-01-24 18:26:48
【问题描述】:

我正在尝试在 Visual Studio Express 2013 (Visual C++) 中使用 mciSendString,但我一直收到错误

Error   1   error C3861: 'mciSendStringA': identifier not found

我认为这是因为我没有链接到正确的 dll,但我无法在网上或 msdn 上找到有关如何链接到 dll 的任何详细信息。似乎很奇怪,没有关于此的更明显的文档。谁能告诉我如何链接到 dll?

编辑:

这是我要运行的代码:

#include <Windows.h>
#include <iostream>
#include <mmsystem.h>

extern char command1[] = "open C:\\boing.mp3 type MPEGVideo alias 0";
extern char command2[] = "play 0 from 0";

int main()
{
    mciSendStringA(command1, NULL, 0, 0);
    mciSendStringA(command2, NULL, 0, 0);
}

【问题讨论】:

  • 是编译错误,不是链接错误。你可能忘记了#include &lt;mmsystem.h&gt;
  • 嗯,不,我已经包含了
  • 你最好看一下mmsystem.h,它可能已经损坏了。

标签: visual-studio visual-c++ linker visual-studio-2013


【解决方案1】:

要使mciSendString() 工作,您需要链接到winmm.lib

只需将winmm.lib 添加到Project Properties &gt; Linker &gt; Input &gt; Additional Dependencies 即可。

【讨论】:

  • 感谢您的回复。我一直在尝试找到添加库的位置,但我仍然找不到任何关于它的文档。你知道 Visual Studio Express 2013 是如何做到这一点的吗?
  • 嗯,这很奇怪,我实际上已经找到了那个菜单并尝试过,但无济于事。由于该菜单只有一个文本框(而不是文件选择器对话框),您只需输入库的名称,对吗?您是否必须包含完整路径?在“继承的值”下方,它列出了没有路径的 kernel32.lib。
  • @Mike2012 你不需要包含它的完整路径。在将其添加到附加依赖项后,请确保值类似于 winmm.lib;%(AdditionalDependencies)
  • 它看起来完全像:winmm.lib;%(AdditionalDependencies) 但我仍然得到同样的错误。
【解决方案2】:

查看mmsystem.h(诚然来自V7.1A Windows SDK,这是我安装的最新版本),我可以看到其中有一个#ifdef _WIN32 块。如果未定义 _WIN32,则未声明 mciSendStringA。而是声明了mciSendString

检查您的项目选项并确保已定义 WIN32_WIN32。我猜您是从控制台项目开始的,而不是 Windows 应用程序项目,并且其中至少有一个没有定义。

【讨论】:

  • 这是项目 > 属性中的内容吗?抱歉,我通常不使用 Visual Studio。
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 2014-12-22
  • 2015-04-04
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多