Visual C++

De Banane Atomic

Chapeau ^

Officiellement appelé handle de suivi, il est utilisé pour la déclaration des objets de type de classe de référence.

Cpp.png
int * pi1 = new int;      // native heap
Int32^ pi2 = gcnew Int32; // managed heap

void Method(Array^ array1)
{
    Array ^localArray;
    array1->Copy(array1, localArray, array1->Length);
}

Utiliser une DLL C#

Ajouter la référence

Clique-droit sue le projet → Références → Ajouter une nouvelle référence...

Utiliser la DLL dans le code

Cpp.png
using namespace Espace1::Espace2;

int main(array<System::String ^> ^args)
{
    Class1 ^ object1 = gcnew Class1;
    Class1::StaticProperty->Method("argument");
    Class1::StaticMethod();
}

Définir un symbole

Dans le code

Cpp.png
#define MON_SYMBOLE 1

Ou lors de la compilation :
Propriétés du projet → Propriétés de configuration → C/C++ → Ligne de commande → Ajouter /D "MON_SYMBOLE"

Changer la version du Framework .NET ciblé

Éditer le fichier de projet (*.vcxproj) → Ajouter ou modifier la ligne suivante :

Xml.png
<PropertyGroup Label="Globals">
    <TargetFrameworkVersion>2.0</TargetFrameworkVersion>

Avec VS2010, les projets C++ ciblent par défaut le Framework .NET 4. StackOverflow

Win32 vs CLR

  • CLR → projet C++/CLI .NET utilisant du code managé
  • Win32 → projet C++ natif utilisant du code non managé

Erreurs de compilation

error LNK2028: jeton non résolu

Ajoutez les bibliothèques manquantes :
Propriétés du projet → Propriétés de configuration → Éditeur de liens → entrée → Dépendances supplémentaires → hériter des paramètres par défaut du parent ou du projet.

error C2872: 'IServiceProvider' : symbole ambigu

L'interface IServiceProvider est définies à la fois dans "using namespace System;" et dans "#include <windows.h>".
Il faut déplacer le "using namespace System;" à l'intérieur du namespace ou il est utilisé.

NTDDI_VERSION setting conflicts with _WIN32_WINNT setting

Modifier la directive et mettre la bonne version de NTDDI

Cpp.png
#define NTDDI_VERSION NTDDI_WIN7

cannot open include file 'afxres.h'

  • Installer Microsoft Foundation Classes for C++ via Visual Studio
  • Ou remplacer afxres.h par windows.h

Warnings de compilation

warning C4996: 'sprintf': This function or variable may be unsafe
Une nouvelle méthode sprinf_s plus sécurisée doit être utilisée.
Pour masquer ce type de warning il faut définir le symbole _CRT_SECURE_NO_DEPRECATE
Security Enhancements in the C RunTime
Secure Template Overloads