【发布时间】:2014-01-10 23:51:49
【问题描述】:
我似乎无法打开 CD 托盘。 'extern C' 给我带来了一些错误,extern 是什么意思?
谢谢! 这是图像! Error in C++ opening CD Tray
【问题讨论】:
-
我建议您将源代码和错误消息(作为文本)复制并粘贴到您的问题中。如果他们有类似的问题,它将使人们更容易找到他们,这意味着您的问题不依赖于外部链接。
我似乎无法打开 CD 托盘。 'extern C' 给我带来了一些错误,extern 是什么意思?
谢谢! 这是图像! Error in C++ opening CD Tray
【问题讨论】:
"extern C" 在这里并不重要。实际问题是您致电mciSendString() 时出现“未解决的外部”错误。这意味着编译器知道该函数存在(因为该声明可能已包含在标头中)。但是,它不知道该函数的实现在哪里。
这通常意味着您没有链接到所需的外部库。 Microsoft's documentation 表示您需要Winnmm.lib 库才能使用mciSendString()。您需要在项目设置中指定该库,该库通常位于 Visual Studio 中的“链接器 -> 输入 -> 附加依赖项”之类的位置。
【讨论】:
extern "C" 告诉 C++ 编译器函数声明是 C 函数。这在链接时很重要,因为 C++ 编译器会生成“损坏”的符号。有关 extern "C" 的更多详细信息,请参阅此帖子:In C++ source, what is the effect of extern "C"?
您的潜在问题与 extern "C" 无关。链接器告诉您找不到 C 函数 mciSendString()。您的项目需要链接到 Winmm.lib。
【讨论】:
正如其他人所提到的,您收到的错误表明找不到函数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;
}
【讨论】: