Как экспортировать функцию C ++ как DLL, которая выдает исключение? - PullRequest
5 голосов
/ 25 января 2010

Когда я пытаюсь экспортировать следующую функцию как dll:

extern "C" __declspec(dllexport) void some_func()
{
  throw std::runtime_error("test throwing exception");
}

Visual C ++ 2008 выдает мне следующее предупреждение:

1>.\SampleTrainer.cpp(11) : warning C4297: 'some_func' : function assumed not to throw an exception but does
1>        The function is extern "C" and /EHc was specified

Мне нужно extern "C", потому что я использую Qt QLibrary для загрузки DLL и разрешения имени функции Без extern "C" он не может найти функцию some_func ().

Ответы [ 2 ]

3 голосов
/ 01 ноября 2012

Насколько я знаю, /EHs необходимо использовать в случае, если вам нужна функция "C", которая может бросить. См .: / EH (модель обработки исключений) . Вам необходимо установить это в вашем VisualStudio Project.

Напротив /EHc говорит компилятору предположить, что внешние функции C никогда не выдают исключение C ++. И ваш компилятор жалуется, что ваш void some_func() действительно выбрасывает.

3 голосов
/ 25 января 2010

Если вы полны решимости сделать то, о чем вас предупреждает компилятор, почему бы просто не подавить предупреждение?

#pragma warning(disable: 4247)
...