У меня есть проект C#. NET со слоем C ++ / CLI, взаимодействующим с собственным приложением C ++. Я пытаюсь передать строку из моего метода c ++ / cli в собственный метод c ++. Базовая реализация c выглядит следующим образом:
C ++ / CLI
void CLI::CLIClass::GetResults(String^ %param1, String^ %param2)
{
const std::wstring ws_param1(context.marshal_as<std::wstring>(param1).c_str());
std::wstring ws_param2(context.marshal_as<std::wstring>(param2).c_str());
CppEngine::EngineClass::GetResults(ws_param1, ws_param2);
}
C ++ Native
bool EngineClass::GetResults(const std::wstring ¶m1, std::wstring ¶m2){
param2 = doSomething(); //based on param1
return true;
}
Проблема:
На языке C ++ Символы нежелательной почты нативного уровня принимаются в качестве параметров вместо фактических параметров.
Примечание:
использование wchar_t * на собственном уровне работает нормально, но старается избежать этого, чтобы уменьшить усилия по управлению жизненным циклом.