std::string MarshalString(System::String ^str){
	if(str == nullptr || str->Length == 0) return std::string("");
	using namespace System::Runtime::InteropServices;
	array<unsigned char>^ encodedBytes = System::Text::Encoding::UTF8->GetBytes(str);
	pin_ptr<unsigned char> pinnedBytes = &encodedBytes[0];
	return std::string(reinterpret_cast<const char*>(pinnedBytes));
}