Quantcast
Channel: VBForums - Visual Basic 6 and Earlier
Viewing all articles
Browse latest Browse all 21246

Trying to implement IShellItem - where'd I go wrong?

$
0
0
Just on the off chance anyone around here is familiar with typelibs and interfaces...
Code:

[
        odl,
        uuid(43826D1E-E718-42EE-BC55-A1E261C37BFE)
]
interface IShellItem : stdole.IUnknown {
        HRESULT BindToHandler(
                [in] IBindCtx *pbc,
                [in] UUID rbhid,
                [in] UUID riid,
                [out] void *ppvOut);

        HRESULT Compare(
                [in] IShellItem *psi,
                [in] LONG hint,
                [out, retval] LONG *piOrder);

        HRESULT GetAttributes(
                [in] SFGAO_Flags sfgaoMask,
                [out, retval] SFGAO_Flags *psfgaoAttribs);

        HRESULT GetDisplayName(
                [in] SIGDN sigdnName,
                [out, retval] LPWSTR *ppszName);

        HRESULT GetParent(
                [out] IShellItem *ppsi);

};

Public Declare Function SHCreateShellItem Lib "shell32" (ByVal pidlParent As Long, psfParent As Any, pidl As Long, ppsi As IShellItem)
Dim hRes As Long
Dim isi As IShellItem
hRes = SHCreateShellItem(0, ByVal 0&, ByVal GetPIDLFromPath(Me.hwnd, "C:\temp"), isi)

'lpw = isi.GetDisplayName(0)
n = isi.GetAttributes(SFGAO_CANRENAME Or SFGAO_CANDELETE)

MsgBox hRes & "|||" & CStr(n)

All the types are correctly defined (long, uuid, IBindCtx, IShellFolder)... because they're all parts of working implementations from the same typelib of IShellFolder et al. that I use in my project. I know maybe psfParent should be explicitly declared as IShellFolder, but MSDN says I can use either that or pass a fully-qualified pidl, which is what I was doing. The typelib compiles without error.

SHCreateShellItem is returning S_OK but fails to create the object (isi Is Nothing = True). If I pass a valid IShellFolder, VB crashes.

My eventual goal is getting to IThumbnailProvider, which I can't bind to from IShellFolder2.

For reference, this is the source from shodjidl.idl I translated from:
Code:

cpp_quote("      HRESULT (WINAPI *BindToHandler)(IShellItem *This,IBindCtx *pbc,REFGUID rbhid,REFIID riid,void **ppvOut);")
cpp_quote("      HRESULT (WINAPI *GetParent)(IShellItem *This,IShellItem **ppsi);")
cpp_quote("      HRESULT (WINAPI *GetDisplayName)(IShellItem *This,SIGDN sigdnName,LPOLESTR *ppszName);")
cpp_quote("      HRESULT (WINAPI *GetAttributes)(IShellItem *This,SFGAOF sfgaoMask,SFGAOF *psfgaoAttribs);")
cpp_quote("      HRESULT (WINAPI *Compare)(IShellItem *This,IShellItem *psi,SICHINTF hint,int *piOrder);")


Viewing all articles
Browse latest Browse all 21246

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>