【发布时间】:2010-11-01 11:38:15
【问题描述】:
我正在尝试编写一个 C# 托管类来包装 SHGetKnownFolderPath,目前它可以在 Vista 上运行,但由于没有在 shell32.dll 中找到正确的函数,因此在 XP 上崩溃,正如预期的那样。
我想设置它,这样如果使用 XP,我可以使用 System.Environment.GetFolderPath 回退到一个(公认的 hacky)解决方案。 (或者,如果它在 shell32 中找不到函数,那就更好了。)
除了条件编译之外还有什么办法吗?
我当前的代码如下:
public abstract class KnownFolders
{
[DllImport("shell32.dll")]
private static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out IntPtr pszPath);
// Trim properties to get various Guids.
public static string GetKnownFolderPath(Guid guid)
{
IntPtr pPath;
int result = SHGetKnownFolderPath(guid, 0, IntPtr.Zero, out pPath);
if (result == 0)
{
string s = Marshal.PtrToStringUni(pPath);
Marshal.FreeCoTaskMem(pPath);
return s;
}
else
throw new System.ComponentModel.Win32Exception(result);
}
}
【问题讨论】:
标签: c# windows-vista interop windows-xp dllimport