我似乎无法打开 CD 托盘。'extern C' 给我带来了一些错误,extern 也是什么意思?
谢谢!这是图像! C++ 打开 CD 托盘时出错
“extern C”在这里并不重要。实际问题是您调用mciSendString()
. 这意味着编译器知道该函数存在(因为该声明可能已包含在标头中)。但是,它不知道该函数的实现在哪里。
这通常意味着您没有链接到所需的外部库。Microsoft 的文档表明您需要该Winnmm.lib
库才能使用mciSendString()
. 您需要在项目设置中指定该库,这通常位于 Visual Studio 中的“链接器 -> 输入 -> 附加依赖项”之类的位置。
extern "C" 告诉 C++ 编译器函数声明是一个 C 函数。这在链接时很重要,因为 C++ 编译器会生成“损坏”的符号。有关 extern "C" 的更多详细信息,请参阅这篇文章: 在 C++ 源代码中,extern "C" 的作用是什么?
不过,您的潜在问题与 extern "C" 无关。链接器告诉您找不到 C 函数 mciSendString()。您的项目需要链接到 Winmm.lib。
正如其他人所提到的,您得到的错误表明mciSendString
找不到函数的定义。如果您阅读了mciSendString
on 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;
}