64ビット.NETアセンブリでDllImport(PInvoke)を使用してPathCanonicalize関数を使用しようとしていますが、メモリの破損が原因であらゆる種類の不良動作(クラッシュ、等...)。 (例:System.AccessViolationException:読み取りまたは書き込み保護されているメモリをしようとしましたこれは、多くの場合、他のメモリが破損していることを示しています。)DllImport PathCanonicalize 64ビットでメモリ破損が発生する
[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の代わりに、直接文字列を使用すべきことであるが、this threadで見ました。 PathCanonicalizeの入力文字列と出力文字列をマーシャリングする方法を誰かに教えてもらえますか?
プロトタイプである:PathCanonicalize
ためMSDN当たり
BOOL PathCanonicalize(
__out LPTSTR lpszDst,
__in LPCTSTR lpszSrc
);
ありがとうございますそれ! – decasteljau