Comment les individus gèrent avertissement C4793: 'fonction': fonction compilé en natif?

j'utilise la bibliothèque OpenCV et un de ses fichiers d'en-tête, cxoperations.php, génère "warning C4793: 'anonymous namespace'::CV_XADD' : function compiled as native", si mon projet C++ est compilé avec le support CLR. Je peux empêcher l'avertissement en entourant L'en-tête OpenCV include comme ceci:

#pragma managed(push,off)
#include <cv.h>
#pragma managed(pop)

mais le projet qui utilise réellement OpenCV n'est pas compilé avec le support CLR, c'est une bibliothèque statique C++ native. Le projet qui a le support CLR, et génère cet avertissement sans les déclarations pragma, utilise simplement cette bibliothèque statique. Donc je suis un peu surpris que l'avertissement ait été créé, surtout étant donné que la bibliothèque statique n'est pas compilée avec le support CLR, et que c'est seulement cet en-tête qui cause le problème.

<!-Cette solution me semble donc sous-optimale. Est-ce ainsi que vous traiteriez cet avertissement, ou pouvez-vous recommander une meilleure pratique?

18
demandé sur Jav_Rock 2010-05-07 02:09:21

3 réponses

je pense que ce que vous voulez, c'est ceci:

#pragma unmanaged
#include <cv.h>
#pragma managed
// managed code wrapping unmanaged opencv functions

un projet C++/CLI peut contenir à la fois des parties gérées et non gérées, et le compilateur prend soin de regrouper les données entre les 2 pour vous. Les points d'entrée gérés seront appelables à partir des applications normales.net (comme C# et le reste) et utiliseront la collecte des ordures, et ils feront appel à des fonctions non gérées pour effectuer le levage lourd.

15
répondu Blindy 2010-05-06 22:20:24

je pense que vous devriez supprimer l'avertissement. MSDN le doc stipule explicitement que les pragmatiques gérés/non gérés ne devraient pas être utilisés avant les énoncés d'inclusion.

#pragma warning(disable: 4793) // methods are compiled as native (clr warning)
#include <cv.h>
#pragma warning(pop)
3
répondu fmuecke 2016-02-10 20:45:17

si vous ne pouvez pas changer les fichiers de code existants, vous pouvez vous débarrasser de l'avertissement en désactivant le support CLR pour le fichier spécifique qui affiche avertissement 4793. Bien sûr, cela ne fonctionne que si ce fichier n'utilise pas les fonctionnalités CLR.

pour désactiver le support CLR pour un fichier spécifique, localisez-le dans Solution Explorer, faites un clic droit et ouvrez ses pages de propriétés. Set Common Language RunTime SupportPas De Langue Commune, Le Support D'Exécution. Ne pas oubliez pas de le faire pour Toutes Les Configurations et Toutes Les Plateformes.

Turn off CLR support per file

1
répondu Christian 2015-11-23 16:48:25