Попытка использовать SHGetKnownFolderPath API для возврата пути к папке загрузок в VB.Net. Я могу вызвать функцию и получить указатель на результат, но я сбит с толку правильным способом получить это в строку VB.Net для работы. (Я понимаю, что CopyMemory - это не тот путь, но я не могу понять смысл методов Marshalling).
<< Отредактировано, чтобы показать окончательный код >>
Imports System.Runtime.InteropServices
<DllImport("shell32.dll")>
Private Function SHGetKnownFolderPath(
<MarshalAs(UnmanagedType.LPStruct)> ByVal rfid As Guid,
ByVal dwFlags As UInt32,
ByVal hToken As IntPtr,
ByRef pszPath As IntPtr) As Int32
End Function
Public Function GetDownloadsFolder() As String
Dim Result As String = ""
Dim ppszPath As IntPtr
Dim gGuid As Guid = New Guid("{374DE290-123F-4565-9164-39C4925E467B}")
If SHGetKnownFolderPath(gGuid, 0, 0, ppszPath) = 0 Then
' ----
' Question was: what goes here? Answer follows:
'
Result = Marshal.PtrToStringUni(ppszPath)
Marshal.FreeCoTaskMem(ppszPath)
' ---
End If
Return Result
End Function