Кажется, я не могу открыть лоток для компакт-дисков.
Это вызывает у меня ошибку с ‘extern C’, что тоже означает extern?
Спасибо!
Вот изображение!
Ошибка в C ++ при открытии CD Tray
«extern C» здесь не совсем уместен. Актуальная проблема — это «нерешенные внешние» ошибки при вашем вызове mciSendString()
, Это означает, что компилятор знает, что функция существует (потому что объявление предположительно было включено в заголовок). Однако он не знает, где находится реализация этой функции.
Обычно это означает, что вы не связались с необходимой внешней библиотекой. Документация Microsoft указывает на то, что вам нужно Winnmm.lib
библиотека для того, чтобы использовать mciSendString()
, Вы должны указать эту библиотеку в настройках вашего проекта, которая обычно находится под чем-то вроде «Linker -> Input -> Additional Dependencies» в Visual Studio.
extern «C» сообщает компилятору C ++, что объявление функции является функцией C. Это имеет значение во время компоновки, потому что компилятор C ++ генерирует «искаженные» символы. Для более подробной информации о extern «C», смотрите этот пост: В источнике C ++, каков эффект от extern "С"?
Ваша основная проблема не связана с внешним «C», хотя. Линкер сообщает вам, что функция C mciSendString () не найдена. Ваш проект должен ссылаться на Winmm.lib.
Как уже упоминали другие, ошибка, которую вы получаете, указывает на то, что определение функции mciSendString
не может быть найден. Если вы читаете требования для mciSendString
на 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;
}