Я пытаюсь использовать функцию PathCanonicalize, используя DllImport (PInvoke) в 64-битной сборке .NET, и это вызывает повреждение памяти, приводящее ко всем видам плохого поведения (сбой, исключения из ниоткуда и т. Д ...). (Например: System.AccessViolationException: попытка чтения или записи защищенной памяти. Это часто указывает на повреждение другой памяти.)
[DllImport("shlwapi", CharSet = CharSet.Auto, EntryPoint="PathCanonicalize", SetLastError = true)]
private static extern bool PathCanonicalize( [Out] StringBuilder lpszDst,[In] string lpszSrc );
public static string MyPathCanonicalize(string path)
{
StringBuilder builder = new StringBuilder();
if (!PathCanonicalize(builder, path))
return path;
return builder.ToString();
}
Я видел в этой теме , что мне, вероятно, следует использовать IntPtr вместо прямых строк. Кто-нибудь может показать мне, как упорядочить их в строках ввода и вывода в PathCanonicalize?
Прототип:
BOOL PathCanonicalize(
__out LPTSTR lpszDst,
__in LPCTSTR lpszSrc
);