我想在64位.NET程序集上使用函數PathCanonicalize使用DllImport(PInvoke),它會導致內存損壞導致各種不良行爲(崩潰,等等...)。 (例如:System.AccessViolationException:試圖讀取或寫入保護內存這通常是指示其他內存已損壞。)在64位DllImport PathCanonicalize導致內存損壞
[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();
}
我this thread看到了,我或許應該使用的IntPtr,而不是直接串。任何人都可以告訴我如何編組PathCanonicalize中的輸入和輸出字符串?
原型爲:
BOOL PathCanonicalize(
__out LPTSTR lpszDst,
__in LPCTSTR lpszSrc
);
謝謝,它修復了它! – decasteljau