Así que trabajo en clr, creando .NET dll en Visual C++.Cómo convertir System :: String^en std :: string?
I Tru dicho código:
static bool InitFile(System::String^ fileName, System::String^ container)
{
return enc.InitFile(std::string(fileName), std::string(container));
}
tener codificador que resives normaly std :: string. pero aquí el compilador (estudio visual) me da un error C2664 si elimino argumentos de std :: string y C2440, que en general es el mismo. VS me dice que simplemente no puede convertir System :: String^en std :: string.
Así que estoy triste ... ¿qué debo hacer para convertir System :: String^en std :: string?
Actualización:
Ahora, con su ayuda tengo dicho código
#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);
}
...
pero cuando intento compilar me da C4996
error C4996: 'msclr :: :: interoperabilidad error_reporting_helper < _To_Type, _From_Type> :: marshal_as ': esta conversión no es compatible con la biblioteca o el archivo de encabezado necesario para esta conversión no está incluido. Consulte la documentación sobre 'Cómo: Extender la Biblioteca de Marshaling' para agregar su propio método de clasificación.
¿qué hacer?
Ha incluido 'msclr \ marshal.h'. Pruebe 'msclr \ marshal_cppstd.h'. –
@Chris Schmich: gracias - ahora se compila perfectamente =) – Rella