2010-01-25 2 views
4

Lorsque je tente d'exporter la fonction suivante comme dll:Comment exporter la fonction C++ en tant que dll qui provoque une exception?

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

Visual C++ 2008 me donne l'avertissement suivant:

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 

Je dois extern "C" parce que j'utilise Qt QLibrary pour charger la DLL et résoudre le nom de la fonction. Sans extern "C", il ne trouve pas la fonction some_func().

Répondre

2

Si vous êtes déterminé à faire ce que le compilateur vous avertit, pourquoi ne pas simplement supprimer l'avertissement?

#pragma warning(disable: 4247) 
+0

merci pour le conseil. Cependant, y a-t-il un autre moyen de contourner cela? Je veux juste exporter une fonction C++. – sivabudh

+2

Ensuite, n'utilisez pas extern "C", utilisez plutôt un fichier .def pour forcer le nom exporté à être le nom non décoré (ou ce que vous voulez). –

+0

Sinon, vous pouvez essayer et comprendre comment obtenir QT pour charger le nom décoré C++. –

3

Pour autant que je sais /EHs doit être utilisé dans le cas où vous avez besoin d'une fonction « C » qui peut jeter. Voir ceci: /EH (Exception Handling Model). Vous devez définir ceci dans votre projet VisualStudio. Au contraire /EHc indique au compilateur de supposer que les fonctions C externes ne lèvent jamais une exception C++. Et votre compilateur vous plaint que votre void some_func() lancer.

Questions connexes