【问题标题】:Getting error while trying to open CD Tray in C++尝试在 C++ 中打开 CD 托盘时出错
【发布时间】:2014-01-10 23:51:49
【问题描述】:

我似乎无法打开 CD 托盘。 'extern C' 给我带来了一些错误,extern 是什么意思?

谢谢! 这是图像! Error in C++ opening CD Tray

【问题讨论】:

  • 我建议您将源代码和错误消息(作为文本)复制并粘贴到您的问题中。如果他们有类似的问题,它将使人们更容易找到他们,这意味着您的问题不依赖于外部链接。

标签: c++ cd tray


【解决方案1】:

"extern C" 在这里并不重要。实际问题是您致电mciSendString() 时出现“未解决的外部”错误。这意味着编译器知道该函数存在(因为该声明可能已包含在标头中)。但是,它不知道该函数的实现在哪里。

这通常意味着您没有链接到所需的外部库。 Microsoft's documentation 表示您需要Winnmm.lib 库才能使用mciSendString()。您需要在项目设置中指定该库,该库通常位于 Visual Studio 中的“链接器 -> 输入 -> 附加依赖项”之类的位置。

【讨论】:

    【解决方案2】:

    extern "C" 告诉 C++ 编译器函数声明是 C 函数。这在链接时很重要,因为 C++ 编译器会生成“损坏”的符号。有关 extern "C" 的更多详细信息,请参阅此帖子:In C++ source, what is the effect of extern "C"?

    您的潜在问题与 extern "C" 无关。链接器告诉您找不到 C 函数 mciSendString()。您的项目需要链接到 Winmm.lib。

    【讨论】:

      【解决方案3】:

      正如其他人所提到的,您收到的错误表明找不到函数mciSendString 的定义。如果您阅读了msdn 上的mciSendString 的要求,您会发现它需要winmm.lib 库。下面是如何使用 Visual C++ 预处理器指令 pragma comment 添加库的演示:

      #include "stdafx.h"
      #pragma once
      #include<windows.h>
      #include <mmsystem.h>
      #pragma comment (lib, "winmm.lib")
      #include <stdlib.h>
      
      
      int _tmain(int argc, _TCHAR* argv[])
      {
          mciSendString(L"set cdaudio door open", 0, 0, 0);
          return 0;
      }
      

      【讨论】:

      • 解决了这个问题,但最好在你的答案中提供一些解释,而不是只给出代码答案。
      • 我已经编辑了我的答案以包含一个不会重复太多的解释,其他人已经说过。
      猜你喜欢
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      相关资源
      最近更新 更多