Я тоже не знаком с Visual-C ++, но, согласно этой статье
Указатели закрепления нельзя использовать в качестве: [...] возвращаемого типа функции
Я не уверен, будет ли указатель действительным после завершения функции (даже если он замаскирован под char*
.
Кажется, вы объявляете в функции некоторые локальные переменные, которые хотите передать в область вызова. «Однако, возможно, они все равно выйдут из области видимости, когда вы вернетесь из функции.
Может быть, вы должны пересмотреть то, что вы пытаетесь достичь в первую очередь?
Обратите внимание, что в статье, на которую вы ссылались, std::string
(передается по значению, т.е. по копии) используется в качестве возвращаемого параметра.
std::string managedStringToStlString( System::String ^s )
{
Encoding ^u8 = Encoding::UTF8;
array<unsigned char> ^bytes = u8->GetBytes( s );
pin_ptr<unsigned char> pinnedPtr = &bytes[0];
return string( (char*)pinnedPtr );
}
Таким образом, локальные переменные не выходят за пределы своей области видимости. Строка обрабатывается копией как неуправляемый std::string
. Это именно то, что предлагает этот пост .
Когда вам понадобится const char*
позже, вы можете использовать метод string :: c_str () , чтобы получить его. Обратите внимание, что вы также можете записать std::string
в файл, используя file streams .
Это вариант для вас?