PDA

Visualizza la versione completa : [C++] Anomalia property di tipo string (CLI)


CyberCrasher
29-09-2012, 16:12
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à:



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? :(

CyberCrasher
29-09-2012, 16:24
[EDIT]Sto adottando questa soluzione: Utilizzo String^ anzichè string ma questo implica che debba costruire un oggetto String^ manualmente:



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); }}

MItaly
30-09-2012, 14:04
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.

CyberCrasher
30-09-2012, 16:48
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

Loading