Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] Anomalia property di tipo string

    Ho definito diverse proprietà di una classe c++ e riesco ad accedervi tranquillamente tramite codice c# ma riscontro una anomalia sulle proprietà di tipo string.

    Scrivendo ad esempio la seguente proprietà:

    codice:
    string nomeluogo;
    
    public:
    property string nomeLuogo {
        string get(){ return nomeLuogo; }
        void set(string s){ nomeLuogo = s; }}
    }
    Nel tentare di accedere tramite c# ottengo un problema di accesso (per livello di protezione).
    E l'editor mi mostra le seguenti funzioni:
    get_nomeLuogo(char*);
    set_nomeLuogo(char*);

    Ho fatto alcune modifiche ma non riesco a visualizzare nomeLuogo come qualunque altra proprietà direttamente accessibile. Se provo a usare string^ il compilatore dice che string non può essere managed, se la dichiaro come string* ottengo un errore in c# perchè non accetta i puntatori non-managed.
    Qualche idea?

  2. #2
    [EDIT]Sto adottando questa soluzione: Utilizzo String^ anzichè string ma questo implica che debba costruire un oggetto String^ manualmente:

    codice:
    property String^ nomeLuogo {
      String^ get(){
        String^ s = gcnew String(nomeLuogo.c_str());
        return s;
      }
      void set(String^ s){ nomeLuogo = msclr::interop::marshal_as<std::string>(s); }}

  3. #3
    Credo che non ci siano alternative significativamente diverse, C# non sa nulla del tipo std::string, per cui in una maniera o nell'altra bisogna fare marshaling std::string<->System::String.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Per il momento sto riuscendo a farlo funzionare, ma ci sarà da capire con tutti questi codici managed\non-managed se ci sono sprechi di risorse.. appena finisco il progetto posto qualche domanda in un topic apposito così mi assicuro di aver fatto un marshalling nel rispetto delle risorse

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.