C++ 如何导出C++;作为引发异常的dll的函数?

C++ 如何导出C++;作为引发异常的dll的函数?,c++,dll,compiler-warnings,dllexport,C++,Dll,Compiler Warnings,Dllexport,当我尝试将以下函数导出为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 exce

当我尝试将以下函数导出为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

我需要外接“C”,因为我使用QtQlibrary加载dll并解析函数名。如果没有外部“C”,它就找不到some_func()函数。

如果您决定执行编译器警告您的操作,为什么不干脆取消警告

#pragma warning(disable: 4247)

据我所知,必须使用
/EHs
,以防需要可以抛出的“C”函数。请参见:。您需要在VisualStudio项目中设置此选项


相反,<代码> /EHC告诉编译器假设EXCENT C函数从不抛出C++异常。您的编译器会抱怨您的

使某些函数无效()
确实抛出。

谢谢您的建议。但是,还有其他办法吗?实际上,我只想导出C++函数。然后不要使用EXSTN“C++”,而是使用.DEF文件来强制导出导出的名称为未修饰的名称(或者您想要的任何名称)。