Basic Univers
ProcedureDLL.s ShellLink_GetPath(ShellLinkFile.s)
Protected ShellLink.IShellLinkA, PersistFile.IPersistFile, *buffer, result.s
If CoInitialize_(0) = #S_OK
If CoCreateInstance_(?CLSID_ShellLink, 0, 1, ?IID_IShellLink, @ShellLink) = #S_OK
If ShellLink\QueryInterface(?IID_IPersistFile, @PersistFile) = #S_OK
*buffer = AllocateMemory( #MAX_PATH )
If *buffer
If MultiByteToWideChar_( #CP_ACP , 0, @ShellLinkFile, - 1, *buffer, #MAX_PATH )
If PersistFile\Load(*buffer, 0) = #S_OK
If ShellLink\Resolve(0, 1) = #S_OK
RtlZeroMemory_(*buffer, #MAX_PATH )
ShellLink\GetPath(*buffer, #MAX_PATH , 0, 0)
result = PeekS(*buffer)
EndIf
EndIf
EndIf
FreeMemory(*buffer)
EndIf
PersistFile\Release()
EndIf
ShellLink\Release()
EndIf
CoUninitialize_()
EndIf
ProcedureReturn result
DataSection
CLSID_ShellLink: Data.q $0000000000021401, $46000000000000C0
IID_IShellLink: Data.q $00000000000214EE, $46000000000000C0
IID_IPersistFile: Data.q $000000000000010B, $46000000000000C0
EndDataSection
EndProcedure
Debug ShellLink_GetPath( "c:\purebasic.lnk" )