Так что я работаю в clr, создавая .net dll в Visual C ++.
Я имею такой код:
static bool InitFile(System::String^ fileName, System::String^ container)
{
return enc.InitFile(std::string(fileName), std::string(container));
}
имея кодировщик, который обычно резервирует std :: string. но здесь компилятор (visual studio) выдает мне ошибку C2664, если я удаляю аргументы из std :: string и C2440, что в целом одинаково. VS говорит мне, что просто не может конвертировать System :: String ^ в std :: string.
Так что мне грустно ... что мне делать, чтобы превратить System :: String ^ в std :: string?
Обновление:
Теперь с вашей помощью у меня есть такой код
#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);
}
...
но когда я пытаюсь скомпилировать, это дает мне C4996
ошибка C4996: 'msclr :: interop :: error_reporting_helper <_To_Type, _From_Type> :: marshal_as': это преобразование не поддерживается библиотекой, или файл заголовка, необходимый для этого преобразования, не включен. Пожалуйста, обратитесь к документации «Как: расширить библиотеку маршалинга», чтобы добавить собственный метод маршалинга.
что делать?