我有一个带有C ++ / CLI层与C ++本机应用程序交互的C#.NET项目。我试图将字符串从我的c ++ / cli方法传递给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 ++原生
bool EngineClass::GetResults(const std::wstring ¶m1, std::wstring ¶m2){
param2 = doSomething(); //based on param1
return true;
}
问题:
在c ++原生级别上,垃圾字符作为参数而不是实际参数被接收。
注意:
在本机级别使用wchar_t *可以正常工作,但是尝试避免使用它,以减少生命周期管理工作。