Я пытаюсь использовать функцию ShSetFolderPath в C #. Я работаю на Win7, мне удалось использовать ShSetKnownFolderPath, и он отлично работает.
Поскольку эта функция недоступна в WinXP, я попытался вызвать ShSetFolderPath. Поскольку я не знаком с вызовом, я провел поиск и нашел кое-что на каком-то французском форуме. Я не говорю по-французски, но это объявление имеет смысл (как написано в Замечаниях документации по функции в библиотеке MSDN ):
[DllImport( "Shell32.dll", CharSet = CharSet.Unicode, EntryPoint = "#232" ) ]
private static extern int SHSetFolderPath( int csidl, IntPtr hToken, uint flags, string path );
Я называю это так:
<code>
private static int CSIDL_DESKTOP = 0x0000;</p>
<p>public static void SetDesktopPath(string path)
{
int ret;
ret = SHSetFolderPath(CSIDL_DESKTOP, IntPtr.Zero, 0, path);<br>
if (ret != 0)
{
Console.WriteLine(ret);
Console.WriteLine(Marshal.GetExceptionForHR(ret));
}
}
Он работает в Win7, но в XP функция возвращает -2147024809, что означает «Значение не попадает в ожидаемый диапазон».
Я думаю, что это не так с импортом Dll. Любая идея?