Строки являются неизменяемыми, вы не можете передать их напрямую, даже если вы закрепите их. Более серьезно, вам придется иметь дело с возможностью того, что функция возвращает большую строку. Функция небезопасна по своей конструкции, поскольку вы не можете предотвратить ее возвращение слишком большой строки пути. Полагаю, вы вряд ли что-то можете с этим поделать, но вам придется использовать буфер, по крайней мере, достаточно большой для общих строк пути. Этот код выполнит работу:
#include <vcclr.h>
...
String^ file = "blah.txt";
wchar_t path[_MAX_PATH];
{
pin_ptr<const wchar_t> wch = PtrToStringChars(file);
wcscpy_s(path, _MAX_PATH, wch);
}
BOOL ok = PathFindOnPath(path, something);
Возможно, фигурные скобки выглядят странно, это гарантирует, что управляемая строка не будет закреплена слишком долго.