尝试在C ++中打开CD托盘时出错

时间:2014-01-10 14:14:49

标签: c++ cd tray

我似乎无法打开CD托盘。 它突然出现了'extern C'的错误,extern意味着什么呢?

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

正如其他人所提到的,您得到的错误表明无法找到函数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;
}