Pb déclaration

mafio31 Messages postés 15 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 11 février 2008 - 31 janv. 2008 à 14:14
mafio31 Messages postés 15 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 11 février 2008 - 6 févr. 2008 à 06:55
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
31 janv. 2008 à 15:08
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
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
31 janv. 2008 à 21:05
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.
0
mafio31 Messages postés 15 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 11 février 2008
1 févr. 2008 à 00:18
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)
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 févr. 2008 à 01:15
Non ! cela sert a définir dans quel espace de nom on travaille... rien à voir avec une dll.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mafio31 Messages postés 15 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 11 février 2008
1 févr. 2008 à 01:21
Bin ça me provoque des erreurs, il ne reconnait pas ces déclarations ... :s
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 févr. 2008 à 09:42
Bas c'est pas cool....

Sérieusement comment veux tu qu'on t'aide si tu nous donnes pas les messages d'erreurs.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 févr. 2008 à 10:24
faut ajouter ta dll dans les references de ton projet (me semble)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 févr. 2008 à 10:56
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 févr. 2008 à 11:26
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
0
mafio31 Messages postés 15 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 11 février 2008
1 févr. 2008 à 14:22
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
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 févr. 2008 à 18:03
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
{
...
};
0
mafio31 Messages postés 15 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 11 février 2008
1 févr. 2008 à 19:39
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
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 févr. 2008 à 14:35
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...
0
mafio31 Messages postés 15 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 11 février 2008
6 févr. 2008 à 06:55
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 :)
0
Rejoignez-nous