Pb déclaration

Signaler
Messages postés
15
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
11 février 2008
-
Messages postés
15
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
11 février 2008
-
Bonjour,
j'ai récupérer un code dont j'ai besoin, qui sert à lire des valeurs dans un capteur de température, via un réseau 1-Wire.
Donc j'ai un fichier.cpp et un fichier.h. Dans le .h, il y a dans la déclaration:
using

namespace System;
using

namespace com::dalsemi::onewire;
using

namespace com::dalsemi::onewire::debug;
using

namespace com::dalsemi::onewire::adapter;
using

namespace com::dalsemi::onewire::container;
using

namespace com::dalsemi::onewire::utils;

J'aimerais comprendre à quoi cela sert, car ça me provoque des erreurs lors de la compilation!

merci

14 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
permet de déclarer des lib que l'on veut utiliser.
permet de ne pas ecrire :

System.IO.Encoding
mais IO.Encoding directement, par exemple

pour les autres, com::dalsemi, etc

ca doit être issu d'un composant ocx qu'il te faudra enregistrer sur ton psote (regsvr32)
et ajouter dans les references de ton projet.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Euh je suis pas d'accord. Il ne s'agit pas de "déclarer des lib que l'on veut utiliser." Il s'agit simplement de préciser dans quel espace de nom on veut travailler.
Messages postés
15
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
11 février 2008

Apparament cela servirait à déclarait une dll, c'est comme si il y avait "import com.dalsemi.onewire" en Java.

Seulement cela me pose problème car ça me met des erreurs lors de la compilation, quelqu'un pourrait me dire comment faire ? (je possède la dll, la mettre dans le fichier courant ne change rien :s)
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Non ! cela sert a définir dans quel espace de nom on travaille... rien à voir avec une dll.
Messages postés
15
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
11 février 2008

Bin ça me provoque des erreurs, il ne reconnait pas ces déclarations ... :s
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bas c'est pas cool....

Sérieusement comment veux tu qu'on t'aide si tu nous donnes pas les messages d'erreurs.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
faut ajouter ta dll dans les references de ton projet (me semble)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Lol Renfield, tu le fais exprès la.... on te dit que ca n'a rien a voir avec une dll !!

Si ces déclarations de sont pas reconnus, c'est qu'il manque l'inclusion du fichier .h dans lequel sont définis ces namespaces.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Prenons un cas similaire, simple.
Je créé un nouveau projet C++ .Net  (console)
Je souhaites utiliser Excel... un composant ActiveX (COM)

Menu Project > References > Add New Reference > Onglet COM > Microsoft Excel 10.0 Object Library > Ok > Ok

Je peux maintenant faire joujou avec les objets Excel :

Excel::ApplicationClass^ App =

gcnew Excel::ApplicationClass();App->Visible=

true;

pas besoin, donc, de namespace ici

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
15
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
11 février 2008

Le truc c'est que là ça n'utilise pas d'appliction externe. Voic le msg d'erreur

1>c:\users\mafio_o\documents\visual studio 2005\projects\testtemp\DS18B20.h(5) : error C2653: 'com' : n'est pas un nom de classe ni d'espace de noms

1>c:\users\mafio_o\documents\visual studio 2005\projects\testtemp\DS18B20.h(5) : error C2871: 'onewire' : un espace de noms avec ce nom n'existe pas

et pareil pour tous les mots de la déclaration
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Si tu utilises forcément une lib externe par l'intermédiaire  d'un fichier de définition .h car ces namespace n'existent pas en standard. Donc il faut que tu recherches dans toutes les sources que tu as, l'endroit ou sont définis ces namespace.

Tu recherches la chaine "namespace System".
Tu devrais trouver une ligne du style:
namespace System
{
...
};
Messages postés
15
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
11 février 2008

Oui le "namespace Sytem" se trouve juste au dessus de la déclaration qui me pose problème "namespace com::dalsemi::onewire", dans un .h
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Salut,


Un namespace permet de regrouper des classes, des fonctions, des
types... Sous un même nom. Genre dans le name space équitation, il y a
cheval, sabot, cravache... Pour faire un namespace.
<code class="cpp_keyword2">namespace
a
{

void
toto
()
//
première
fonction
toto

{

}

}
</code>


Dans ton cas, tu ne veux pas faire un namespace, tu veux te servir d'un namespace existant.


Les fonctions d'un namespace sont cachées, et il faut préciser le
namespace pour accèder à la fonction en question. Il y a deux méthodes
: préciser le namespace à chaque appel :
<code class="cpp_function">a::
toto
();
</code>



Mais cette syntaxe est très lourde. C'est pour cela que l'on utilise using namespace :

using namespace a;
toto();

On utilise using une fois au début du fichier, et on a plus à préciser le namespace à chaque fois.

Maintenant, ton problème est que ton source a des using namespace,
et donc appelle probablement des fonctions déclarés dans ceux-ci, mais
le compilo ne trouve pas les déclaration de ces namespace.

luthor t'as demandé de rechercher la déclaration de ces namespaces,
et toi, tu lui a donné la ligne qui dit que l'on va les utiliser...

Ce qu'il te manque, ce n'est ni une .dll ou un .lib, mais un .h, ou
l'inclusion de ce .h dans ton fichier qui demande les namespaces. Mais
c'est vrai que comme le dit Renfield, ça peut peut être un fichier
généré par VC à partir d'une dll COM ou d'un assembly .NET.

Et comme le dit luthor, dans ce .h, tu trouveras :

namespace System
{
...
};

Par contre le namespace System, ça sent encore le coup de la CLR, et
il à l'air de le trouver, donc occupe toi plutôt des autres.

D'après google, il dalsemi = Dallas Semiconductor.

Ils proposent des libs COM, java, .NET...
Messages postés
15
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
11 février 2008

Merci pour vos réponses,
j'ai trouvé mon erreurs! ce "using namespace com::dalsemi::....." faisait bien apelle à un fichier .dll (OneWireAPI.NET.dll). Il fallait donc ajouter cette dll comme référence (je ne connaissais pas cette option)
Voici comment faire:

- dans le menu en haut, 'Projet'
- 'Propriété'
- dans le menu de gauche 'Propriétés communes'
- 'Références'
- puis 'Ajouter une nouvelle référence'
- onglet 'Parcourir'
- et on selectionne la lib dynamique souhaitée.

Voilà, merci à ceux qui ont pris le temps de répondre :)