« Visual C++ » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
 
Aucun résumé des modifications
 
Ligne 1 : Ligne 1 :
=Chapeau ^=
[[Category:VisualStudio]]
= Chapeau ^ =
Officiellement appelé ''handle de suivi'', il est utilisé pour la déclaration des objets de type de classe de référence.
Officiellement appelé ''handle de suivi'', il est utilisé pour la déclaration des objets de type de classe de référence.
{|
<kode lang='cpp'>
!style="padding: 0 10px 0 0"| [[File:cpp.png|40px]]
|
<syntaxhighlight lang="cpp">
int * pi1 = new int;      // native heap
int * pi1 = new int;      // native heap
Int32^ pi2 = gcnew Int32; // managed heap
Int32^ pi2 = gcnew Int32; // managed heap
Ligne 13 : Ligne 11 :
     array1->Copy(array1, localArray, array1->Length);
     array1->Copy(array1, localArray, array1->Length);
}
}
</syntaxhighlight>
</kode>
|}


=Utiliser une DLL C#=
= Utiliser une DLL C# =
==Ajouter la référence==
== Ajouter la référence ==
Clique-droit sue le projet &rarr; Références &rarr; Ajouter une nouvelle référence...
Clique-droit sue le projet &rarr; Références &rarr; Ajouter une nouvelle référence...


==Utiliser la DLL dans le code==
== Utiliser la DLL dans le code ==
{|
<kode lang='cpp'>
!style="padding: 0 10px 0 0"| [[File:cpp.png|40px]]
|
<syntaxhighlight lang="cpp">
using namespace Espace1::Espace2;
using namespace Espace1::Espace2;


Ligne 33 : Ligne 27 :
     Class1::StaticMethod();
     Class1::StaticMethod();
}
}
</syntaxhighlight>
</kode>
|}


=Définir un symbole=
= Définir un symbole =
Dans le code
Dans le code
{|
<kode lang='cpp'>
!style="padding: 0 10px 0 0"| [[File:cpp.png|40px]]
|
<syntaxhighlight lang="cpp">
#define MON_SYMBOLE 1
#define MON_SYMBOLE 1
</syntaxhighlight>
</kode>
|}


Ou lors de la compilation :<br/>
Ou lors de la compilation :<br/>
Propriétés du projet &rarr; Propriétés de configuration &rarr; C/C++ &rarr; Ligne de commande &rarr; Ajouter /D "MON_SYMBOLE"
Propriétés du projet &rarr; Propriétés de configuration &rarr; C/C++ &rarr; Ligne de commande &rarr; Ajouter /D "MON_SYMBOLE"


=Changer la version du Framework .NET ciblé=
= Changer la version du Framework .NET ciblé =
Éditer le fichier de projet (*.vcxproj) &rarr; Ajouter ou modifier la ligne suivante :
Éditer le fichier de projet (*.vcxproj) &rarr; Ajouter ou modifier la ligne suivante :
{|
<kode lang='xml'>
!style="padding: 0 10px 0 0"| [[File:xml.png|40px]]
|
<syntaxhighlight lang="xml">
<PropertyGroup Label="Globals">
<PropertyGroup Label="Globals">
     <TargetFrameworkVersion>2.0</TargetFrameworkVersion>
     <TargetFrameworkVersion>2.0</TargetFrameworkVersion>
</syntaxhighlight>
</kode>
|}
Avec VS2010, les projets C++ ciblent par défaut le Framework .NET 4.
Avec VS2010, les projets C++ ciblent par défaut le Framework .NET 4.
[http://stackoverflow.com/questions/2921702/change-c-cli-project-to-another-framework-than-4-0-with-vs2010 StackOverflow]
[http://stackoverflow.com/questions/2921702/change-c-cli-project-to-another-framework-than-4-0-with-vs2010 StackOverflow]


=Win32 vs CLR=
= Win32 vs CLR =
*CLR &rarr; projet C++/CLI .NET utilisant du code managé
* CLR &rarr; projet C++/CLI .NET utilisant du code managé
*Win32 &rarr; projet C++ natif utilisant du code non managé
* Win32 &rarr; projet C++ natif utilisant du code non managé


= Erreurs de compilation =
= Erreurs de compilation =
Ligne 91 : Ligne 76 :
[http://msdn.microsoft.com/fr-fr/library/8ef0s5kh%28VS.80%29.aspx Security Enhancements in the C RunTime]<br/>
[http://msdn.microsoft.com/fr-fr/library/8ef0s5kh%28VS.80%29.aspx Security Enhancements in the C RunTime]<br/>
[http://msdn.microsoft.com/fr-fr/library/ms175759%28VS.80%29.aspx Secure Template Overloads]
[http://msdn.microsoft.com/fr-fr/library/ms175759%28VS.80%29.aspx Secure Template Overloads]
[[Category:VisualStudio]]

Dernière version du 6 avril 2020 à 20:48

Chapeau ^

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

Cpp.svg
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.svg
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.svg
#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.svg
<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.svg
#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