none
Epinglage RRS feed

  • Question

  • J'ai une erreur sur un Cast:

    je vous met le code et l'erreur:

    int iPOS = (int)pAnalysedChunk->DrivingPos;

    L'erreur cite un épinglage. je ne sait pas comment corriger

    1>..\..\..\..\DBMS\MissionDBManager\src\MissionDatabaseManager.cpp(1454): error C2440: 'cast de type' : impossible de convertir de 'enPOSM ^' en 'int'
    1>          un type représentant une adresse dans le tas gc peut uniquement être converti en type intégral par épinglage
    


    Jean Noël Martin

    mercredi 25 février 2015 18:48

Réponses

  • Pour reprendre le problème à la source, êtes vraiment obligé d'utiliser un int non managé au lieu d'utiliser un Int32^ managé ???

    Paul Bacelar, Ex - MVP VC++

    • Marqué comme réponse JeanNoel53 jeudi 5 mars 2015 18:32
    mercredi 4 mars 2015 15:02
    Modérateur

Toutes les réponses

  • Bonsoir, Jean Noël,

    Avez-vous essayé d'utiliser la fonction GCHandle::Alloc avec GCHandleType::Pinned?

    	GCHandle handle = GCHandle::Alloc(votreobjet, GCHandleType::Pinned);
    	//puis vous pouvez utiliser handle.AddrOfPinnedObject().ToPointer();
    	//et manipuler l’objet
    	handle.Free();

    Vous pouvez consulter cet exemple: In C++/CLI, Is it OK to use memcpy to copy managed arrays?


    Cordialement,

    Dimitar

    jeudi 26 février 2015 18:30
    Modérateur
  • Je vais essayer. Je reviens donner mon status

    J'ai du mal a appliquer votre solution avec mon code

    						int iPOS = (int)pAnalysedChunk->DrivingPos;
    						int Typ = (int)pAnalysedChunk->ChunkType;
    						int Lang = (int)Language;

    avec enLanguageM pour Language

    enChunkTypeM pout pAnalysedChunk->ChunkType

    enPOSM pour pAnalysedChunk->DrivingPos

    J'ai bien essayé:

    int iPOS = (int)enPOSM::Alloc(pAnalysedChunk->DrivingPos, enPOSM::Pinned);

    mais le compilateur m'a gravement sanctionné

    1>MissionDatabaseManager2.cpp(828): error C2838: 'Alloc' : nom qualifié non conforme dans une déclaration de membre
    1>MissionDatabaseManager2.cpp(828): error C2838: 'Pinned' : nom qualifié non conforme dans une déclaration de membre
    1>MissionDatabaseManager2.cpp(828): error C2065: 'Pinned' : identificateur non déclaré
    1>MissionDatabaseManager2.cpp(828): error C3861: 'Alloc' : identificateur introuvable

    j'ai modifié le code et j'ai comme résultat un message plus explicite

    1>MissionDatabaseManager2.cpp(828): error C2275: 'enPOSM' : utilisation non conforme de ce type comme expression
    1>          D:\usr\Specification Loader\dev\Common\com\EnumerationM.hpp(289) : voir la déclaration de 'enPOSM'
    1>MissionDatabaseManager2.cpp(828): error C2039: 'Alloc' : n'est pas membre de '`global namespace''
    1>MissionDatabaseManager2.cpp(828): error C2039: 'Pinned' : n'est pas membre de '`global namespace''
    1>MissionDatabaseManager2.cpp(828): error C2065: 'Pinned' : identificateur non déclaré
    1>MissionDatabaseManager2.cpp(828): error C2275: 'enPOSM' : utilisation non conforme de ce type comme expression

    J'ai essayé sur la base de:la doc microsoft

    namespace SpecificationLoader
    {
            using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
    	using namespace concurrency;

    mis le namespace est refusé

    1>MissionDatabaseManager2.cpp(68): error C2871: 'concurrency' : un espace de noms avec ce nom n'existe pas
    

    Jean Noël Martin






    vendredi 27 février 2015 18:00
  • Bonjour, Jean Noël,

    using namespace concurrency;

    mis le namespace est refusé

    1>MissionDatabaseManager2.cpp(68): error C2871: 'concurrency' : un espace de noms avec ce nom n'existe pas

    Jean Noël Martin

    Avez-vous inclus le fichier d’en-tête amp.h tout au début du fichier ? Voudriez-vous essayer avec using namespace Concurrency; (C majuscule) ?

    Cordialement,
    Dimitar

    lundi 2 mars 2015 07:42
    Modérateur
  • J'ai introduit #include <amp.h> dans stdafx et j'ai essayé avec une majuscule sans succès

    Jean Noël Martin


    lundi 2 mars 2015 09:12
  • Bonjour, Jean Noël,

    Donc vous essayez d'utiliser cet espace de noms . Avez-vous inclus tous les fichiers d’en tête listés dans la section Configuration requise / Requirements de la documentation au début de votre fichier?

    Cordialement,
    Dimitar

    lundi 2 mars 2015 09:24
    Modérateur
  • Je met l'en tête du fichier je ne sait pas ce que vous voulez dire dans Configuration requise / Requirements

    namespace SpecificationLoader
    {
        using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
    	using namespace concurrency;
    	
    


    Jean Noël Martin

    lundi 2 mars 2015 17:07
  • Bonjour, Jean Noël,

    Je voulais dire les fichiers d’en tête qui y sont listés et qui doivent être inclus pour utiliser l’espace de noms concurrency. Je les copie ici: agents.h, concrt.h, concrtrm.h, concurrent_priority_queue.h, concurrent_queue.h, concurrent_unordered_map.h, concurrent_unordered_set.h, concurrent_vector.h, internal_concurrent_hash.h, internal_split_ordered_list.h, ppl.h, pplcancellation_token.h, pplconcrt.h, pplinterface.h, ppltasks.h .

    Cordialement,
    Dimitar

    mardi 3 mars 2015 07:22
    Modérateur
  • Merci. J'ai inclus ces fichier dans stdafx mais cela n'a rien changé

    Jean Noël Martin

    mardi 3 mars 2015 12:55
  • Pour reprendre le problème à la source, êtes vraiment obligé d'utiliser un int non managé au lieu d'utiliser un Int32^ managé ???

    Paul Bacelar, Ex - MVP VC++

    • Marqué comme réponse JeanNoel53 jeudi 5 mars 2015 18:32
    mercredi 4 mars 2015 15:02
    Modérateur