我试图在64位.NET程序集上使用DllImport(PInvoke)函数PathCanonicalize,它会导致内存损坏导致各种不良行为(崩溃,异常情况等等).(例如: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();
}
Run Code Online (Sandbox Code Playgroud)
我在这个帖子中看到我应该使用IntPtr而不是直接字符串.任何人都可以告诉我如何在PathCanonicalize中输入和输出字符串中的那些编组?
原型是:
BOOL PathCanonicalize(
__out LPTSTR lpszDst,
__in LPCTSTR lpszSrc
);
Run Code Online (Sandbox Code Playgroud)
从SDK文档:
lpszDst
[out]指向接收规范化路径的字符串的指针.您应该将此缓冲区的大小设置为MAX_PATH, 以确保它足够大以容纳返回的字符串.
你没做的.固定:
StringBuilder builder = new StringBuilder(260);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
445 次 |
| 最近记录: |