0

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

谢谢!这是图像! C++ 打开 CD 托盘时出错

4

3 回答 3

5

“extern C”在这里并不重要。实际问题是您调用mciSendString(). 这意味着编译器知道该函数存在(因为该声明可能已包含在标头中)。但是,它不知道该函数的实现在哪里。

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

于 2014-01-10T14:24:49.350 回答
3

extern "C" 告诉 C++ 编译器函数声明是一个 C 函数。这在链接时很重要,因为 C++ 编译器会生成“损坏”的符号。有关 extern "C" 的更多详细信息,请参阅这篇文章: 在 C++ 源代码中,extern "C" 的作用是什么?

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

于 2014-01-10T14:28:17.247 回答
2

正如其他人所提到的,您得到的错误表明mciSendString找不到函数的定义。如果您阅读了mciSendStringon msdn的要求,您会发现它需要该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-01-10T14:40:11.103 回答