Quindi lavoro in clr, creando .net dll in visual C++.Come trasformare System :: String^in std :: string?
ho TRU tale codice:
static bool InitFile(System::String^ fileName, System::String^ container)
{
return enc.InitFile(std::string(fileName), std::string(container));
}
avere encoder che resives normalmente std :: string. ma qui il compilatore (visual studio) mi dà errore C2664 se spoglio gli argomenti da std :: string e C2440 che è in generale lo stesso. VS mi dice che non riesce a convertire System :: String^in std :: string.
Quindi sono triste ... cosa devo fare per trasformare System :: String^in std :: string?
Aggiornamento:
ora con il vostro aiuto ho tale codice
#include <msclr\marshal.h>
#include <stdlib.h>
#include <string.h>
using namespace msclr::interop;
namespace NSSTW
{
public ref class CFEW
{
public:
CFEW() {}
static System::String^ echo(System::String^ stringToReturn)
{
return stringToReturn;
}
static bool InitFile(System::String^ fileName, System::String^ container)
{
std::string sys_fileName = marshal_as<std::string>(fileName);;
std::string sys_container = marshal_as<std::string>(container);;
return enc.InitFile(sys_fileName, sys_container);
}
...
ma quando provo a compilare mi dà C4996
errore C4996: 'msclr :: :: interoperabilità error_reporting_helper < _To_Type, _From_Type> :: marshal_as ': questa conversione non è supportata dalla libreria o il file di intestazione necessario per questa conversione non è incluso. Fare riferimento alla documentazione su "Come: estendere la libreria Marshalling" per aggiungere il proprio metodo di marshalling.
cosa fare?
Hai incluso 'msclr \ marshal.h'. Prova 'msclr \ marshal_cppstd.h'. –
@Chris Schmich: grazie - ora compila perfettamente =) – Rella