Erreur du compilateur C2743

'type' : impossible d’intercepter un type natif avec __clrcall destructeur ou constructeur de copie

Un module compilé avec /clr a tenté d’intercepter une exception de type natif et où le destructeur ou le constructeur de copie du type utilise __clrcall la convention d’appel.

Lorsqu’elle est compilée avec /clr, la gestion des exceptions s’attend à ce que les fonctions membres d’un type natif soient __cdecl et non __clrcall. Les types natifs avec des fonctions membres utilisant __clrcall la convention d’appel ne peuvent pas être interceptés dans un module compilé avec /clr.

Pour plus d’informations, consultez l’article /clr (Compilation pour le Common Language Runtime).

Exemple

L’exemple suivant génère l’erreur C2743.

// C2743.cpp
// compile with: /clr
public struct S {
   __clrcall ~S() {}
};

public struct T {
   ~T() {}
};

int main() {
   try {}
   catch(S) {}   // C2743
   // try the following line instead
   // catch(T) {}

   try {}
   catch(S*) {}   // OK
}