Ошибка при попытке открыть CD Tray в Stack Overflow

Кажется, я не могу открыть лоток для компакт-дисков.
Это вызывает у меня ошибку с ‘extern C’, что тоже означает extern?

Спасибо!
Вот изображение!
Ошибка в C ++ при открытии CD Tray

0

Решение

«extern C» здесь не совсем уместен. Актуальная проблема — это «нерешенные внешние» ошибки при вашем вызове mciSendString(), Это означает, что компилятор знает, что функция существует (потому что объявление предположительно было включено в заголовок). Однако он не знает, где находится реализация этой функции.

Обычно это означает, что вы не связались с необходимой внешней библиотекой. Документация Microsoft указывает на то, что вам нужно Winnmm.lib библиотека для того, чтобы использовать mciSendString(), Вы должны указать эту библиотеку в настройках вашего проекта, которая обычно находится под чем-то вроде «Linker -> Input -> Additional Dependencies» в Visual Studio.

5

Другие решения

extern «C» сообщает компилятору C ++, что объявление функции является функцией C. Это имеет значение во время компоновки, потому что компилятор C ++ генерирует «искаженные» символы. Для более подробной информации о extern «C», смотрите этот пост: В источнике C ++, каков эффект от extern "С"?

Ваша основная проблема не связана с внешним «C», хотя. Линкер сообщает вам, что функция C mciSendString () не найдена. Ваш проект должен ссылаться на Winmm.lib.

3

Как уже упоминали другие, ошибка, которую вы получаете, указывает на то, что определение функции 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;
}
2
По вопросам рекламы [email protected]