Results 1 to 14 of 14

Thread: [twinBASIC] WinDevLib - Windows Development Library for twinBASIC (oleexp+more)

  1. #1

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Lightbulb [twinBASIC] WinDevLib - Windows Development Library for twinBASIC (oleexp+more)

    Windows Development Library for twinBASIC :: WinDevLib

    This project is a comprehensive twinBASIC replacement for oleexp.tlb, my Modern Shell Interfaces Type Library project for VB6, that is x64 compatible, due to the many problems using midl to create a 64bit tlb.

    This and oleexp are projects to supply Windows shell and component interfaces in a format consumable by VB6/VBA/tB. This involves not only defining interfaces, but using VB/tB compatible types-- so in some cases, even though there may be an existing way to import references to interfaces, they may be unusable due to e.g. the use of unsigned types, C-style arrays, double pointers, etc. All interfaces, types, consts, and APIs from oleexp are covered, and there's additional API coverage not included in oleexp. For a full list of interfaces, see INTERFACES.md.

    In addition WinDevLib has 5000+ of the most common Windows API definitions: The idea is to make programming in tB more like working in C/C++ with windows.h and a few others included, so you're not constantly stopping coding to find or make API declares.

    This project is implemented purely in tB native code, as unlike VB6 there's language support for defining interfaces and coclasses. As a twinPACKAGE, regular code is supported in addition to the definitions, so the regular addin modules have been built in (mIID.bas, mPKEY.bas, etc). Does it still make sense to use a project like this when interfaces can be defined in-language? I'd say yes, because for a large number of interfaces, there's deep dependency chains with other interfaces and the types they rely on. It makes more sense to drop this in and be done with it than constantly have to define the interfaces you want and then stubs for their dependencies, especially when you might need those later on. This project is even more useful now with the API coverage; it should cover about 99% of your needs for system DLLS.

    Please report any bugs via the Issues feature here on GitHub.
    Requirements

    twinBASIC Beta 617 or newer is required..


    Adding WinDevLib to your project

    You have 2 options for this:
    Via the Package Server

    twinBASIC has an online package server and WinDevLib is published on it. Open your project settings and scroll to the Library References, then click 'Available Packages'. Add "Windows Development Library for twinBASIC v7.1.286" (or whatever the newest version is). "WinDevLib for Implements" contains Implements compatible versions of a small number of common interfaces not defined in a compatible way in the main project; you normally don't need this. For more details, including illustrations, see this post.

    From a local file

    You can download the project from this repository and use the .twinpack file. Navigate to the same area as above, and click on the "Import from file" button.

    Guide to switching from oleexp.tlb

    WinDevLib presented the best opportunity there would be to ditch some olelib legacy baggage. It's fairly simple to move your VB6 projects to WinDevLib, just follow these steps:
    1. Replace public aliases: It's important to do this first. Run a Replace All changing oleexp.LONG_PTR to LongPtr, oleexp.REFERENCE_TIME to LongLong, oleexp.HNSTIME to LongLong, oleexp.KNOWNFOLDERID to UUID, oleexp.EventRegistrationToken to LongLong, oleexp.BINDPTR to LongPtr, and oleexp.LPCRITICAL_SECTION to LongPtr. If you've used them without the oleexp. prefix, you'll also need to replace those, but if you've imported into tB they should be tagged.

    2. Replace oleexp.IUnknown with IUnknownUnrestricted. WinDevLib keeps this separate due to the major issues with conflicts with the former approach. If your project has IUnknown without oleexp. in front of it, do not replace those, as it's not referring to oleexp.

    3. After you've done those two, you can now go ahead and simply delete all remaining instances of oleexp. (including the .).

    4. Convert Currency to LongLong for interfaces and APIs: It's no longer neccessary to worry about multiplying and dividing by 10,000 since tB supports a true 64bit type in both 32bit and 64bit mode. So this change is ultimately for the better, but existing codebases will have had to have used Currency for all interfaces and oleexp APIs expecting a 64bit integer.

    5. Manually address any errors remaining. Interfaces should be mostly fine at this point, but if you've made use of the APIs in oleexp, many of them have syntax differences, mainly not being able to rewrite an ending [out] argument as the return value, and changing String arguments to LongPtr you'll need StrPtr with. Another major difference is that the default for almost all APIs with ANSI/Unicode (A/W) versions, is now the Unicode version. A notable exception is SendMessage due to the overwhelming amount of VBx code expecting it to mean SendMessageA. In most cases, the W version is declared with LongPtr for strings, and the untagged alias version uses tB's new DeclareWide keyword to disable ANSI conversion while using String.
      Finally, a very small number of APIs and interfaces use ByVal UDTs. Since VB cannot do this, nor can tB yet, a typical workaround was to pass each member as an individual argument. This worked when arguments were 4 bytes each, but the x64 calling convention aligns arguments at 8 bytes. So the two options were to follow that convention, which also works for 32bit allowing a single call for both, or require two different calls for 32 and 64bit. Since one of the main points of twinBASIC is 64bit support, WinDevLib uses the former option. The downside of this is that VB-style calls will have to be rewritten. If you see, for example, ByVal ptX As Long, ByVal ptY As Long replaced with ByVal pt As LongLong, this was an unsupported ByVal POINT. You'd declare a LongLong, and use CopyMemory to fill it: Dim pt As POINT: Dim ptt As Long: ...: CopyMemory ptt, pt, 8.


    Note that this is just for using WinDevLib -- you'll likely have a lot more changes to make if you want to make your project x64 compatible.

    Guide to switching from oleexpimp.tlb

    There's 'WinDevLib for Implements' (WinDevLibImpl.twinpack/.twinproj) as well, but you'll note it has substantially fewer interfaces than oleexpimp.tlb. This is because there's two reasons for an interface to have an alternate version: It uses [ Preservesig ] on one or more methods, or it uses As Any. twinBASIC allows using Implements with As Any by replacing it with As LongPtr (which is what the alternate versions do). So many interfaces were in oleexpimp.tlb for this latter reason, and subsequently are not included in tbShellLibImpl as it's not neccessary.

    If you find an oleexpimp.tlb interface is not in WinDevLibImpl, you will be able to use the one from WinDevLib , simply make sure As Any is changed to As LongPtr.

    tB has announced plans to support [ PreserveSig ] in implemented interfaces in the future; when that happens WinDevLibImpl will be deprecated.

    WinDevLib API standards

    This was mentioned above, but it's worth going into more detail. In addition to the COM interfaces, WinDevLib has a large selection of common Windows APIs; this is a much larger set than oleexp. WinDevLib and twinBASIC represented the best opportunity there would be to modernize standards... most VB programs are written with ANSI versions of APIs being the default. This is not the case with WinDevLib . With very few exceptions, APIs are Unicode by default-- i.e. they use the W, rather than A, version of APIs e.g. DeleteFile maps to DeleteFileW rather than DeleteFileA. The A and W variants use [tt]String/LongPtr[tt], and in almost all cases, the mapped version uses String with twinBASIC's DeclareWide keyword-- this disables Unicode-ANSI conversion, so you can still use String without StrPtr or any Unicode <-> ANSI conversion. Note this usually only applies to strings passed as input, APIs passing a LPWSTR that's allocated externally will still be LongPtr, as they're not in the same BSTR format as VBx/TB strings.

    All APIs are provided, as a minimum, as the explicit W variant, and an untagged version that maps to the W version. Some, but not all, APIs also have an explicit A variant defined that will perform the normal ANSI conversion for compatibility purposes. This is decided on a case by case basis depending on my impression of how much legacy code is around that needs the ANSI version. All new code should use the Unicode versions.

    UDTs used by these calls are also supplied in the same manner, the W variant, an untagged variant that's the same as the W version, and in some cases, an A version. UDTs always use LongPtr for strings, even the untagged versions for DeclareWide.

    As noted before, an exception to the rule is SendMessage, due to the enourmous volume of existing code expecting SendMessage to map to SendMessageA.

    If you have any doubts about which API is being called, twinBASIC will show the full declaration when you hover your cursor over the API in your code.
    A note on seeing UDTs where before they were As Any

    The best example of this is many APIs, like file APIs, where in traditional VB declarations, you see 'As Any' and in WinDevLib you see e.g. SECURITY_ATTRIBUTES or OVERLAPPED. These are the correct the definitions, but VB6 had no facility to specify 'NULL', which is what they usually would be set to. So the VB6 way was a workaround, where you could pass ByVal 0.

    twinBASIC has direct support for passing a null pointer instead of a UDT. You can pass vbNullPtr to these arguments where previously you would have used ByVal 0 on an As Any argument that you've found is now a UDT.

    Example:

    VB6:

    Code:
    Public Declare Function CreateFileW Lib "kernel32" (ByVal lpFileName As Long, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
    
    hFile = CreateFileW(StrPtr("name"), 0, 0, ByVal 0, ...)
    twinBASIC:

    Code:
    Public Declare PtrSafe Function CreateFileW Lib "kernel32" (ByVal lpFileName As LongPtr, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As LongPtr) As LongPtr
    
    hFile = CreateFileW(StrPtr("name"), 0, 0, vbNullPtr, ...)


    Project Download

    Option 1: This project is published to the twinBASIC Package Manager; you can directly add it to your project via Settings->Library References->Availabble Packages. It will show up in the list automatically, and selecting it will download it from the twinBASIC Package server.

    Option 2: This project is also available on GitHub, which includes an Export folder where you can browse the source from your web browser.

    (The attachment size limit no longer permits hosting it here)
    Last edited by fafalone; Oct 17th, 2024 at 04:43 PM. Reason: Name change

  2. #2

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    Currently Implemented Interfaces in Bold (oleexp additions) (as of v1.1.8)
    IAccessible
    IAccessibleHandler
    IAccessibleWindowlessSite
    IAccIdentity
    IAccPropServer
    IAccPropServices; coclass CAccPropServices
    IApplicationAssociationRegistration*; coclass ApplicationAssociationRegistration
    IApplicationAssociationRegistrationUI*; coclass ApplicationAssociationRegistrationUI
    IApplicationDestinations
    IApplicationDocumentLists; coclass ApplicationDocumentLists
    IAppPublisher
    IAssocHandler
    IAssocHandlerInvoker
    IAutoCompleteDropDown
    IBrowserFrameOptions
    IColumnManager
    ICommDlgBrowser*
    ICommDlgBrowser2*
    ICommDlgBrowser3*
    ICondition, coclass LeafCondition et al.
    ICondition2
    IConditionFactory; coclass ConditionFactory
    IConditionFactory2
    IConditionGenerator
    IContextMenu3
    IContextMenuCB
    ICurrentItem
    ICustomizeInfoTip
    ICreateObject
    ICustomDestinationsList; coclass DestinationList
    IDataObjectAsyncCapability‡
    IDefaultExtractIconInit
    IDefaultFolderMenuInitialize; coclass DefFolderMenu
    IDelegateFolder
    IDelegateItem
    IDisplayItem
    IDragSourceHelperr; coclass DragDropHelper
    IDragSourceHelper2r; coclass DragDropHelper
    IDropTargetHelperr; coclass DragDropHelper
    IDynamicHWHandler
    IEntity
    IEnumAssocHandlers
    IEnumerableView
    IEnumExplorerCommand
    IEnumFullIDList
    IEnumPublishedApps
    IEnumReadyCallback
    IEnumResources*
    IEnumShellItems
    IExecuteCommand; coclasses ExecuteFolder, ExecuteUnknown, and AppShellVerbHandler
    IExecuteCommandHost
    IExplorerBrowser; coclass ExplorerBrowser
    IExplorerBrowserEvents
    IExplorerCommand
    IExplorerCommandProvider
    IExplorerCommandState
    IExplorerPaneVisibility*
    IFileDialog
    IFileDialog2
    IFileDialogControlEvents
    IFileDialogCustomize
    IFileDialogEvents
    IFileIsInUse
    IFileOpenDialog; coclass FileOpenDialog
    IFileOperation; coclass FileOperation
    IFileOperationProgressSink
    IFileSaveDialog; coclass FileSaveDialog
    IFileSystemBindData
    IFileSystemBindData2
    IFilterCondition
    IFolderView2
    IFolderViewOptions
    IFolderViewSettings
    IFrameworkInputPane; coclass FrameworkInputPane
    IFrameworkInputPaneHandler
    IHomeGroup; coclass HomeGroup
    IHWEventHandler2
    IIdentityName
    IImageList; coclass ImageList***
    IImageList2
    IImageRecompress; coclass ImageRecompress
    IInertiaProcessor; coclass InertiaProcessor
    IInitializeCommand
    IInitializeNetworkFolder, coclass NetworkPlaces
    IInitializeWithBindCtx
    IInitializeWithFile
    IInitializeWithItem
    IInitializeWithPropertyStore
    IInitializeWithStream
    IInitializeWithWindow
    IInternetSecurityManagerEx
    IInternetSecurityManagerEx2
    IInternetZoneManagerEx
    IInternetZoneManagerEx2
    IInterval, coclass Interval
    IItemFilter
    IItemNameLimits
    IKnownFolder
    IKnownFolderManager; coclass KnownFolderManager
    IManipulationProcessor; coclass ManipulationProcessor
    IManipulationEvents
    IMessageFilter
    IMetaData
    IModalWindow
    IMultiQI
    INamedEntity
    INamedEntityCollector
    INamedPropertyStore
    INameSpaceTreeControl
    INameSpaceTreeControl2; coclass NamespaceTreeControl
    INameSpaceTreeControlAccessible
    INameSpaceTreeControlCustomDraw
    INameSpaceTreeControlDropHandler
    INameSpaceTreeControlEvents
    INameSpaceTreeControlFolderCapabilities
    INamespaceWalk
    INamespaceWalkCB
    INamespaceWalkCB2
    INewMenuClient
    INewWindowManager
    IObjectArray
    IObjectCollection; coclass EnumerableObjectCollection
    IObjectWithFolderEnumMode
    IObjectWithPropertyKey
    IObjMgr
    IOperationsProgressDialog
    IParentAndItem
    IPersistFolder3
    IPreviewHandler
    IPreviewHandlerFrame
    IPreviewHandlerVisuals
    IPreviewItem
    IPreviousVersionsInfo; coclass PreviousVersions
    IProgressDialog
    IPropertyChange
    IPropertyChangeArray
    IPropertyDescription
    IPropertyDescription2
    IPropertyDescriptionAliasInfo
    IPropertyDescriptionList
    IPropertyDescriptionRelatedPropertyInfo
    IPropertyDescriptionSearchInfo
    IPropertyEnumType
    IPropertyEnumType2
    IPropertyEnumTypeList
    IPropertyStore
    IPropertyStoreCache
    IPropertyStoreCapabilities
    IPropertyStoreFactory
    IPropertySystem
    IPublishedApp*
    IPublishedApp2*
    IQueryParser, coclass QueryParser
    IQueryParserManager, coclass QueryParserManager
    IQuerySolution
    IRelatedItem
    IRelationship
    IResolveShellLink
    IResultsFolder
    IRichChunk*
    ISchemaLocalizerSupport
    ISchemaProvider
    ISearchBoxInfo*
    ISearchFolderItemFactory; coclass SearchFolderItemFactory
    ISharedBitmap
    ISharingConfigurationManager; coclass SharingConfigurationManager
    IShellApp
    IShellChangeNotify
    IShellFolderViewCB*
    IShellIconOverlay
    IShellIconOverlayIdentifier*
    IShellIconOverlayManager; coclass CFSIconOverlayManager
    IShellImageDataFactory; coclass ShellImageDataFactory
    IShellImageData
    IShellImageDataAbort*
    IShellItem
    IShellItem2
    IShellItemArray
    IShellItemFilter
    IShellItemImageFactory
    IShellItemResources
    IShellLibrary
    IShellLinkDataList
    IShellMenu*
    IShellMenuCallback*
    IShellRunDll
    IShellTaskScheduler; coclass ShellTaskScheduler
    IShellWindows; coclass ShellWindows
    IStartMenuPinnedList
    IStreamAsync
    ISystemInformation; coclass SystemInformation
    ITaskbarList3
    ITaskbarList4; coclass TaskbarList
    ITaskService, coclass TaskS
    IThumbnailCache; coclass LocalThumbnailCache
    IThumbnailHandlerFactory
    IThumbnailProvider
    IThumbnailSettings
    ITokenCollection
    ITrackShellMenu; coclass TrackShellMenu
    ITranscodeImage; coclass ImageTranscode
    ITransferAdviseSink*
    ITransferDestination*
    ITransferMediumItem
    ITransferSource*
    IUri
    IUserNotification2; coclass UserNotification
    IUserNotificationCallback
    IUseToBrowseItem
    IViewStateIdentityItem
    IVirtualDesktopManager, coclass VirtualDesktopManager
    IVisualProperties
    IZoneIdentifier; coclass PersistentZoneIdentifier
    IZoneIdentifier2
    IZombie
    Task Manager
    IAction
    IActionCollection
    IBootTrigger
    IComHandlerAction
    IDailyTrigger
    IEmailAction
    IEventTrigger
    IExecAction
    IExecAction2
    IIdleSettings
    IIdleTrigger
    ILogonTrigger
    IMaintenanceSettings
    IMonthlyDOWTrigger
    IMonthlyTrigger
    INetworkSettings
    IPrincipal
    IPrincipal2
    IRegisteredTask
    IRegisteredTaskCollection
    IRegistrationInfo
    IRegistrationTrigger
    IRepetitionPattern
    IRunningTask
    IRunningTaskCollection
    ISessionStateChangeTrigger
    IShowMessageAction
    ITaskDefinition
    ITaskFolder
    ITaskFolderCollection
    ITaskHandler
    ITaskHandlerStatus
    ITaskNamedValueCollection
    ITaskNamedValuePair
    ITaskService; coclass TaskScheduler
    ITaskSettings
    ITaskSettings2
    ITaskSettings3
    ITaskVariables
    ITimeTrigger
    ITrigger
    ITriggerCollection
    IWeeklyTrigger

    Spell Checking
    IComprehensiveSpellCheckProvider
    IEnumSpellingError
    IOptionDescription
    ISpellChecker
    ISpellChecker2
    ISpellCheckerChangedEventHandler
    ISpellCheckerFactory; coclass SpellCheckerFactory
    ISpellCheckProvider
    ISpellCheckProviderFactory
    ISpellingError
    IUserDictionariesRegistrar

    ListView
    IDrawPropertyControl
    IListView
    IListViewFooter
    IListViewFooterCallback
    ILVRange
    IOwnerDataCallback
    IPropertyControl
    IPropertyControlBase
    IPropertyValue
    ISubItemCallback

    Shell Automation
    DFConstraint
    DShellFolderViewEvents, coclass ShellFolderViewOC
    Folder
    Folder2
    Folder3
    FolderItem
    FolderItem2, coclass FolderItem
    FolderItems
    FolderItems2
    FolderItems3
    FolderItemVerb
    FolderItemVerbs
    IFolderViewOC
    IShellFolderViewDual
    IShellFolderViewDual2
    IShellFolderViewDual3, coclass ShellFolderView
    IShellDispatch
    IShellDispatch2
    IShellDispatch3
    IShellDispatch4
    IShellDispatch5
    IShellDispatch6, coclass Shell
    IShellLinkDual
    IShellLinkDual2, coclass ShellLinkObject
    Core Audio
    IActivateAudioInterfaceAsyncOperation
    IActivateAudioInterfaceCompletionHandler
    IAudioAutoGainControl
    IAudioBass
    IAudioCaptureClient
    IAudioChannelConfig
    IAudioClient
    IAudioClient2
    IAudioClient3
    IAudioClock
    IAudioClock2
    IAudioClockAdjustment
    IAudioEndpointFormatControl
    IAudioEndpointLastBufferControl
    IAudioEndpointOffloadStreamMeter
    IAudioEndpointOffloadStreamMute
    IAudioEndpointOffloadStreamVolume
    IAudioEndpointVolume
    IAudioEndpointVolumeCallback
    IAudioEndpointVolumeEx
    IAudioInputSelector
    IAudioLfxControl

    IAudioLoudness
    IAudioMeterInformation
    IAudioMidrange
    IAudioMute
    IAudioOutputSelector
    IAudioPeakMeter
    IAudioRenderClient
    IAudioSessionControl
    IAudioSessionControl2
    IAudioSessionEnumerator
    IAudioSessionEvents
    IAudioSessionManager
    IAudioSessionManager2
    IAudioSessionNotification
    IAudioStreamVolume
    IAudioSystemEffects
    IAudioSystemEffects2
    IAudioTreble
    IAudioVolumeDuckNotification
    IAudioVolumeLevel
    IChannelAudioVolume
    IConnector

    IControlChangeNotify
    IControlInterface
    IDeviceSpecificProperty
    IDeviceTopology
    IHardwareAudioEngineBase
    IKsControl
    IKsFormatSupport
    IKsJackContainerId
    IKsJackDescription
    IKsJackDescription2
    IKsJackSinkInformation
    IMMDevice
    IMMDeviceActivator
    IMMDeviceCollection
    IMMDeviceEnumerator
    IMMEndpoint
    IMMNotificationClient
    IPart
    IPartsList
    IPolicyConfig
    IPerChannelDbLevel
    ISimpleAudioVolume
    ISubunit
    DirectShow**
    IAMAnalogVideoDecoder
    IAMAsyncReaderTimestampScaling
    IAMAudioInputMixer
    IAMAudioRendererStats
    IAMBufferNegotiation
    IAMCameraControl
    IAMCertifiedOutputProtection
    IAMChannelInfo
    IAMClockAdjust
    IAMClockSlave
    IAMCollection
    IAMCopyCaptureFileProgress
    IAMCrossbar
    IAMDecoderCaps
    IAMExtendedErrorInfo
    IAMExtendedSeeking
    IAMMediaContent
    IAMMediaContent2
    IAMNetShowConfig
    IAMNetShowExProps
    IAMNetShowPreroll
    IAMNetworkStatus
    IAMStats
    IBaseFilter, multiple coclasses
    IBasicAudio
    IBasicVideo
    IBasicVideo2
    ICaptureGraphBuilder
    ICaptureGraphBuilder2
    IDeferredCommand
    IEnumFilters
    IEnumMediaTypes
    IEnumPins
    IFileSinkFilter
    IFilterGraph, coclass FilterGraph
    IFilterGraph2
    IFilterGraph3
    IFilterInfo
    IGraphBuilder
    IMediaControl
    IMediaEvent
    IMediaEventEx
    IMediaFilter
    IMediaPosition
    IMediaSample
    IMediaSample2
    IMediaSample3
    IMediaTypeInfo
    IPin
    IPinInfo
    IQueueCommand
    IReferenceClock
    IRegFilterInfo
    ISampleGrabber, coclass SampleGrabber
    ISampleGrabberCB
    IVideoWindow
    Windows Imaging Component (WIC)ª
    IWICBitmap
    IWICBitmapClipper
    IWICBitmapCodecInfo
    IWICBitmapCodecProgressNotification
    IWICBitmapDecoder
    IWICBitmapDecoderInfo
    IWICBitmapEncoder
    IWICBitmapEncoderInfo
    IWICBitmapFlipRotator
    IWICBitmapFrameDecode
    IWICBitmapFrameEncode
    IWICBitmapLock
    IWICBitmapScaler
    IWICBitmapSource
    IWICBitmapSourceTransform
    IWICColorContext
    IWICColorTransform
    IWICComponentFactory
    IWICComponentInfo
    IWICDdsDecoder
    IWICDdsEncoder
    IWICDdsFrameDecode
    IWICDevelopRaw
    IWICDevelopRawNotificationCallback
    IWICEnumMetadataItem
    IWICFastMetadataEncoder
    IWICFormatConverter
    IWICFormatConverterInfo
    IWICImageEncoder
    IWICImagingFactory, coclass WICImagingFactory
    IWICImagingFactory2, coclass WICImagingFactory2
    IWICJpegFrameDecode
    IWICJpegFrameEncode
    IWICMetadataBlockReader
    IWICMetadataBlockWriter
    IWICMetadataHandlerInfo
    IWICMetadataQueryReader
    IWICMetadataQueryWriter
    IWICMetadataReader
    IWICMetadataReaderInfo
    IWICMetadataWriter
    IWICMetadataWriterInfo
    IWICPalette
    IWICPersistStream
    IWICPixelFormatInfo
    IWICPixelFormatInfo2
    IWICPlanarBitmapFrameEncode
    IWICPlanarBitmapSourceTransform
    IWICPlanarFormatConverter
    IWICProgressCallback
    IWICProgressiveLevelControl
    IWICStream
    IWICStreamProvider
    Portable Devices
    IEnumPortableDeviceConnectors****
    IEnumPortableDeviceObjectIDs
    IPortableDevice, coclasses PortableDevice, PortableDeviceFTM
    IPortableDeviceCapabilities
    IPortableDeviceConnector****
    IPortableDeviceContent
    IPortableDeviceContent2
    IPortableDeviceDispatchFactory, coclass PortableDeviceDispatchFactory
    IPortableDeviceEventCallback
    IPortableDeviceKeyCollection, coclass PortableDeviceKeyCollection
    IPortableDeviceManager, coclass PortableDeviceManager

    IPortableDeviceProperties
    IPortableDevicePropertiesBulkCallback
    IPortableDevicePropVariantCollection, coclass PortableDevicePropVariantCollection
    IPortableDeviceResources
    IPortableDeviceService, coclass PortableDeviceService
    IPortableDeviceServiceCapabilities
    IPortableDeviceServiceMethodCallback
    IPortableDeviceServiceMethods
    IPortableDeviceServiceOpenCallback
    IPortableDeviceValues, coclass PortableDeviceValues
    IPortableDeviceValuesCollection
    IPortableDeviceWebControl, coclass PortableDeviceWebControl
    IWpdSerializer, coclass WpdSerializer
    Net Connections
    IEnumNetConnection
    IEnumNetSharingEveryConnection
    IEnumNetSharingPortMapping
    IEnumNetSharingPrivateConnection
    IEnumNetSharingPublicConnection
    INetConnection
    INetConnectionConnectUi
    INetConnectionManager, coclass ConnectionManager
    INetConnectionProps
    INetSharingConfiguration
    INetSharingEveryConnectionCollection
    INetSharingManager, coclass NetSharingManager
    INetSharingPortMapping
    INetSharingPortMappingCollection
    INetSharingPortMappingProps
    INetSharingPrivateConnectionCollection
    INetSharingPublicConnectionCollection

    All related types/enums for finished interfaces are provided.
    Last edited by fafalone; Oct 19th, 2022 at 10:28 AM.

  3. #3

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    Interfaces Included From Original OLELIB
    IACList
    IACList2
    IActionProgress
    IActionProgressDialog
    IActiveDesktop
    IAddressBarParser; coclass AddressBarParser
    IAdviseSink
    IAuthenticate
    IAutoComplete
    IAutoComplete2
    IBindCtx
    IBindHost
    IBinding
    IBindProtocol
    IBindStatusCallback
    ICallAddRelease
    ICallGION
    ICallInvoke
    ICallQI
    ICategorizer; multiple coclasses‡
    ICategoryProvider
    ICatInformation; coclass StdComponentCategoriesMgr
    ICatRegister
    ICDBurn; coclass CDBurn
    IClassFactory
    IClassFactory2
    IColumnProvider
    IConnectionPoint
    IConnectionPointContainer
    IContextMenu
    IContextMenu2
    IContinueCallback
    ICopyHookA
    ICopyHookW
    ICreateErrorInfo
    ICreateTypeInfo
    ICreateTypeInfo2
    ICreateTypeLib
    ICreateTypeLib2
    ICustomDoc
    IDataObject
    IDeskBand
    IDiscMaster; coclass MSDiscMasterObj
    IDiscMasterProgressEvents
    IDiscRecorder; coclass MSDiscRecorderObj
    IDispatch (renamed IDispatchUnrestricted)
    IDocHostShowUI
    IDocHostUIHandler
    IDocHostUIHandler2
    IDockingWindow
    IDockingWindowFrame
    IDockingWindowSite
    IDropSource
    IDropTarget
    IDynamicHWHandler
    IEmptyVolumeCache
    IEmptyVolumeCache2
    IEmptyVolumeCacheCallBack
    IEnumACString
    IEnumCATEGORYINFO
    IEnumConnectionPoints
    IEnumConnections
    IEnumDiscMasterFormats
    IEnumDiscRecorders; coclass MSEnumDiscRecordersObj
    IEnumExtraSearch
    IEnumFORMATETC
    IEnumGUID
    IEnumHLITEM
    IEnumIDList
    IEnumMoniker
    IEnumOleDocumentViews
    IEnumOLEVERB
    IEnumSTATDATA
    IEnumSTATPROPSETSTG
    IEnumSTATPROPSTG
    IEnumSTATSTG
    IEnumSTATURL
    IEnumString
    IEnumUnknown
    IEnumVARIANT
    IEnumWorkItems
    IErrorInfo
    IErrorLog
    IExtractIconA
    IExtractIconW
    IExtractImage
    IExtractImage2
    IFillLockBytes
    IFolderFilter
    IFolderFilterSite
    IFolderView
    IFolderViewHost; coclass FolderViewHost
    IHlink
    IHlinkBrowseContext
    IHlinkFrame
    IHlinkSite
    IHlinkTarget
    IHttpNegotiate
    IHWEventHandler
    IHWEventHandler2
    IInputObject
    IInputObjectSite
    IInternetBindInfo
    IInternetHostSecurityManager
    IInternetPriority
    IInternetProtocol
    IInternetProtocolInfo
    IInternetProtocolRoot
    IInternetProtocolSink
    IInternetSecurityManager
    IInternetSecurityMgrSite
    IInternetSession
    IInternetZoneManager
    IJolietDiscMaster
    ILayoutStorage
    ILockBytes
    IMalloc
    IMarshal
    IMoniker
    INetCrawler; coclass NetCrawler
    INewShortcutHookA
    INewShortcutHookW
    IObjectSafety
    IObjectWithSite
    IOleCache
    IOleClientSite
    IOleCommandTarget
    IOleContainer
    IOleControl
    IOleControlSite
    IOleDocument
    IOleDocumentSite
    IOleDocumentView
    IOleInPlaceActiveObject
    IOleInPlaceFrame
    IOleInPlaceObject
    IOleInPlaceSite
    IOleInPlaceUIWindow
    IOleLink
    IOleObject
    IOleWindow
    IParseDisplayName
    IPerPropertyBrowsing
    IPersist
    IPersistFile; coclass ImageProperties
    IPersistFolder
    IPersistFolder2
    IPersistIDList
    IPersistMemory
    IPersistMoniker
    IPersistPropertyBag
    IPersistPropertyBag2
    IPersistStorage
    IPersistStream
    IPersistStreamInit
    IPrint
    IProfferService
    IProgressDialog
    IPropertyBag
    IPropertyBag2
    IPropertyNotifySink
    IPropertySetStorage
    IPropertyStorage
    IPropertyUI; coclass PropertiesUI
    IProvideClassInfo
    IProvideTaskPage
    IPublishingWizard; coclass PublishingWizard
    IQueryAssociations
    IQueryCancelAutoPlay; coclass QueryCancelAutoPlay
    IQueryContinue
    IQueryInfo
    IRecordInfo
    IRedbookDiscMaster
    IRichEditOle
    IRichEditOleCallback
    IRootStorage
    IRunningObjectTable
    IScheduledWorkItem
    ISchedulingAgent
    ISearchContext
    ISequentialStream
    IServiceProvider
    IShellBrowser
    IShellExecuteHookA
    IShellExecuteHookW
    IShellExtInit
    IShellFolder2
    IShellFolder
    IShellIcon
    IShellLinkA
    IShellLinkW; coclass ShellLinkW
    IShellPropSheetExt
    IShellView2
    IShellView
    ISpecifyPropertyPages
    IStorage
    IStream
    ISupportErrorInfo
    ITaskbarList
    ITaskbarList2
    ITask
    ITaskTrigger
    ITextDocument
    ITextFont
    ITextPara
    ITextRange
    ITextSelection
    ITextStoryRanges
    ITypeComp
    ITypeInfo
    ITypeInfo2
    ITypeLib
    ITypeLib2
    IUniformResourceLocatorA
    IUniformResourceLocatorW
    IUnknown (renamed IUnknownUnrestricted)
    IUrlHistoryStg
    IUrlHistoryStg2
    IURLSearchHook
    IURLSearchHook2
    IUserEventTimer; coclass UserEventTimer
    IUserEventTimerCallback; coclass UserEventTimerCallback
    IUserNotification
    IViewObject
    IViewObject2
    IWebWizardExtension; coclass WebWizardHost
    IWindowForBindingUI
    IWinInetHttpInfo
    IWinInetInfo
    IWizardExtension
    IWizardSite
    Last edited by fafalone; Mar 15th, 2023 at 09:05 PM.

  4. #4

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    Major Update (v2.0.20): The project has reached it's initial goal of implementing all but the most obsolete oleexp.tlb interfaces. In addition, with similar exception of a small set of highly obsolete items, the API coverage is now available. Note that this was subject to extensive cleanup; native-language declares can't use the last param as retval on APIs, so all of those were converted, and TLB APIs pass Strings as BSTR, while native language passes ANSI strings, so there's currently a mix of either using LongPtr or tB's DeclareWide for BSTR/LPWSTR support (if it says String you can use a String without StrPtr).

  5. #5

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    Project Updated to v2.1.24

    twinBASIC now supports in-project CoClass syntax! All coclasses from oleexp have been added (I think, if you find one missing please let me know), and can once again be used with the New keyword. The prior sCLSID constants have been left in. Also greatly expanded the API declare coverage to match what was in oleexp, though a few DLLs are still pending. Finally, tbShellLib now declares an compiler constant, TB_SHELLLIB_DEFINED, to help avoid conflicts with other projects (chiefly, my upcoming Common Controls 64-bit compatible library). tbShellLib now requires twinBASIC Beta 167 or newer.

  6. #6

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    Project Updated to v2.4.48

    Apologies for not keeping the version here up to date with GitHub, but I've updated it now as the latest version has a critical bug fix and a number of new interfaces.

    Code:
    pdate (v2.4.48):
    
    -CRITICAL BUG FIX: IFolderView was missing GetDefaultSpacing, breaking any use of it and IFolderView2.
    
    -Bug fix: IsEqualIID API declare was not marked PtrSafe.
    
    -IServiceProvider did not use PreserveSig in the original oleexp, so that has been changed to match here, for use with Implements.
    
    -Added IShellUIHelper[2,3,4,5,6,7,8,9], IShellFavoritesNameSpace, IShellNameSpace, IScriptErrorList and related coclasses.
    
    -Added IDesktopWallpaper with coclass DesktopWallpaper
    
    -Added IAppVisibility and IAppVisibilityEvents
    
    -Added coclass AppStartupLink
    
    -Added IApplicationActivationManager with coclass ApplicationActivationManager
    
    -Added IContactManagerInterop, IAppActivationUIInfo, IHandlerActivationHost, IHandlerInfo, ILaunchSource*****erModelId, ILaunchTargetViewSizePreference, ILaunchSourceViewSizePreference, ILaunchTargetMonitor, IApplicationDesignModeSettings, IApplicationDesignModeSettings2, IExecuteCommandApplicationHostEnvironment, IPackageDebugSettings, IPackageDebugSettings2, IPackageExecutionStateChangeNotification, IDataObjectProvider, IDataTransferManagerInterop. -Added coclasses for above: PackageDebugSettings, SuspensionDependencyManager, ApplicationDesignModeSettings
    
    tbShellLibImpl (v1.0): tbShellLib for Implements initial release. This does not cover all of oleexpimp.tlb because there's no need for an out only vs in, out distinction which many had as the only difference.
    
    Update (v2.3.44): ICategoryProvider and ICategorizer had BSTR instead of LPWSTR (LongPtr) arguments.
    
    Update (v2.3.40): Fixes for SHGetPathFromIDList[W] and IVirtualDesktopManager::IsWindowOnCurrentVirtualDesktop.
    
    Update (v2.3.38): ICategorizer::GetCategory had apidl argument incorrectly defined as ByVal.
    
    Update (v2.3.35): IShellIconOverlay had incorrect pIndex params in both methods. This didn't effect 32bit projects as pointers were the same size as the index.
    
    Update (v2.3.32): Fixed GWL_* duplicate error and LARGE_INTEGER restored to hipart/lowpart for compatibility; ULARGE_INTEGER still uses quadpart if desired.
    
    Update (v2.3.30): Fixed CM_COLUMNINFO bug since it was causing SetColumnInfo to trigger an automation error.
    
    Update (v2.3.26): Minor bug fixes.
    
    Update (v2.2.24): Added IWebBrowser2 interface I thought was already there.

  7. #7

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    Project Updated to v2.5.56

    -Added Sync Manager interfaces and coclasses (SyncMgr.h), including undocumented ITransferConfirmation/coclass TransferConfirmationUI.

    -Added interfaces IPersistSerializedPropStorage, IPersistSerializedPropStorage2, and IPropertySystemChangeNotify

    -Added missing propsys coclasses CLSID_InMemoryPropertyStore, CLSID_InMemoryPropertyStoreMarshalByValue, CLSID_PropertySystem

    -Added IListViewVista interface (Vista-only version of IListView)

    -Added IPinnedList with variants IPinnedListVista (Windows Vista) and IPinnedList10 (Windows 10 build 1809 and newer). Also added IStartMenuPin, ITrayNotify and INotificationCB. These are undocumented taskbar interfaces for programmatically pinning items to the start menu and taskbar. Added TaskbandPin, TrayNotify, and StartMenuPin coclasses (the last one is officially documented for the IStartMenuPinnedList interface with remove pin only, but it implements the undocumented pinning interfaces too and those have been added to the supported list).

    -Bug fix: Numerous enum values defined incorrectly as &H8000, causing sign issues in bitwise operations and downstream issues from that.
    Last edited by fafalone; Feb 2nd, 2023 at 01:58 PM.

  8. #8

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    Project Updated to v2.9.80:

    -Substantially expanded Media Foundation set, also now includes all related GUIDs defined in mfidl.idl.

    -Added basic Media Foundation interfaces from oleexp that were missing up until now.

    -Fixed missing PtrSafe attributes and SwapVTable type errors.

    - Added DXGI and DirectComposition interfaces (experimental).

    -Shell automation intefaces using VARIANT_BOOL have been changed to Boolean to be more correct than Integer (the underlying typedef is short, which is why is was Integer at first).

  9. #9

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    Latest Project Version: v3.2.30

    There's been several new versions since last update here, including four major new features: Direct3D 11/12, all remaining Direct2D interfaces, the Microsoft Speech API interfaces v5.4 and the full set of WebView2 interfaces.

    Here's full list:

    (v3.2.30): Several Speech API interfaces were missing. Also, began using BOOL type as as enum with CFALSE (0) and CTRUE (1) members. I'll be slowly working on changing all the Long items that are actually BOOL to this over the coming months.

    (v3.2.24): Numerous bugfixes to Speech API interfaces.

    (v3.2.22): Missed some WebView2 interfaces that should have LongPtr instead of String; changed all String args to LongPtr just to be safe.

    (v3.2.20): Bug fix: [out] LPWSTR* and [in] LPWSTR for Implements interfaces in WebView2 args changed to LongPtr. IEnumVARIANT was missed; added.

    tbShellLibImpl (v1.2.6): Also was missing Implements version of IEnumVARIANT.

    (v3.2.16): Added WebView2 (EXPERIMENTAL). Added IObjectProvider, IEnumObjects, and IIOCancelInformation interfaces.

    (v3.1.14): Added Microsoft Speech APIs v5.4. Added IHttpNegotiate3.

    (v3.0.13): -Added missing PROPSHEETHEADER and PROPSHEETHEADER_V2 types and PropSheet/PropSheetW APIs. Also corrected wrong values for PSN_TRANSLATEACCELERATOR/PSN_QUERYINITIALFOCUS.

    -Began adding back in some Optionals in DirectX interfaces which weren't supported by MKTYPLIB so weren't in oleexp, where the tB code was generated from.

    -(Bug fix) StringFromGUID2 now uses a Long instead of LPWSTR since the latter was not working.

    -(Bug fix) D3D11CreateDevice and D3D11CreateDeviceAndSwapChain were declared incorrectly for 64bit compatibility (Softare param should be LongPtr).

    (v3.0.10): Added all missing Direct2D interfaces/types/enums and corrected bugs in slDirectX.

    (v2.9.90): EXPERIEMENTAL: Added Direct3D 11 and 12.

    (v2.9.85):

    -Bug fix: ITypeInfo::AddressOfMember returned Long instead of LongPtr (#11); ICreateTypeLib2 incorrectly extended IUnknown instead of ICreateTypeLib, and other misc bugfixes.

    -Added objidl.idl interfaces IAdviseSink2, IClientSecurity, IServerSecurity, IMallocSpy, IClassActivator, IProgressNotify, IStdMarshalInfo, IExternalConnection and IThumbnailExtractor (w/coclass ThumbnailFCNHandler).

    -Added undocmented hardware enum interfaces/coclasses.

    (v2.9.81): Bug fix: ITypeLib::GetTypeInfoCount and several others never had [ PreserveSig ] restored after support was added.
    Last edited by fafalone; Mar 1st, 2023 at 06:14 AM.

  10. #10

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    Sorry I haven't kept this thread more up-to-date.

    The current latest project version is 4.8.147.

    Here's the changelog since the last post:

    • Update (v4.8.147): The OPENFILENAME[A,W] definitions were, inexplicably, still incorrect even though I thought I modified them when I made the issue for the pending fix.
    • Update (v4.8.146): The Common Controls API set did not conform to the project API standards at all; sometimes even within a single control's definitions. Be mindful if you've been using untagged aliases of A/W here. Numerous other small bug fixes. Many additional APIs.
    • Update (v4.7.144): Numerous bug fixes, including changing all olepro32.dll APIs to oleaut32, as the former doesn't exist in 64bit Windows and the functions have been exported by the latter since Win2k. Also added another large batch of APIs, with a focus on GDI drawing.
    • Update (v4.6.142): Some improvements/fixes to certain argument types in DirectX ifaces. Added a large number of font and text APIs in preparation for an upcoming project.
    • Update (v4.6.139): Bug fix: DirectComposition uses numerous overloaded methods; it's apparently an undocumented compiler behavior that these appear in reverse order from their declarations in the v-table, so the order had to be swapped for all overloads. These are currently uniquely named rather than taking advantage of tB's overloading supporting until I hear back from Wayne about the internals of support/implementation for it.
    • Update (v4.6.138): Several bug fixes, added misc commonly used APIs so far overlooked, and a number of additional APIs, focusing on registery, setup apis, and display settings apis.
    • Update (v4.6.134): Critical bug fix: A second WM_USER was accidentally made Public, which would cause numerous ambiguity and constant expression errors in any project using it or a constant derived from it. Also added keyboard APIs and some misc common ones that had been overlooked.
    • Update (v4.6.132): Numerous bug fixes related to string handling (ByRef LongPtrs that should have been ByVal), added another large batch of APIs.
    • Update (v4.5.130): Some minor bug fixes, added IInputPaneAnimationCoordinator, added another batch of APIs (focused on GDI, thread synchronization, and activation contexts).
    • Update (v4.5.128): A number of DirectX interfaces were incompatible with x64 due to ByVal UDTs; these were imported from VB6 declares as e.g. 2 ByVal Longs for a point, but that won't work on x64 because of an 8 byte stack alignment. To keep codebases simple, points now use a single LongLong for both 32 and 64 bit. You declare a LongLong to pass, then use CopyMemory to copy your D2D1_POINT_F or other type into it. Also added some more APIs.
    • Update (v4.5.126): Added DirectComposition Presentation Manager interfaces, added additional APIs (focused on window management and file i/o), some minor bugfixes.
    • Update (v4.4.124): Important bug fixes and additional APIs (GDI printing and window transparency).
    • Update (v4.4.122):

      -Critical bug fix for new tB builds (correctly) flagging Optional UDTs as errors.

      -Added UI Ribbon interfaces, coclasses, and PKEYs. (UIRibbon.h).

      -Added interface IContextCallback with coclass ContextSwitcher (and related APIs).
    • Update (v4.3.120):

      -Added Disk Quota interfaces IDiskQuotaControl (with coclass DiskQuotaControl), IDiskQuotaUser, IDiskQuotaUserBatch, IEnumDiskQuotaUsers, and IDiskQuotaEvents.

      -Bug fixes for certain Optional issues

      -Added missing Direct2D flag to enable color fonts

      -Expanded APIs focusing on subclassing, file mapping, memory management, and NT objects.
    • Update (v4.3.114): Important bug fixes for CreateThread (#14), other bug fixes including IDataObject:Advise sink arg, and additional APIs.
    • Update (v4.3.112): Added some base OLE/COM interfaces I feel were substantial oversights from both olelib and oleexp; IDataAdviseHolder, IOleAdviseHolder, IDropSourceNotify, IEnterpriseDropTarget, and IContinue.
    • Update (v4.3.102):

      -Added some missing base OLE/COM interfaces: IQuickActivate, IAdviseSinkEx, IPointerInactive, IOleUndoManager, IEnumOleUndoUnits, IOleParentUndoUnit, IOleUndoUnit, IViewObjectEx, IOleInPlaceSiteWindowless, IOleInPlaceSiteEx, IOleInPlaceObjectWindowless.

      -Additional APIs, focused on desktop/winstation APIs and DPI awareness APIs.
    • Update (v4.2.98): Numerous new APIs; some minor bugfixes.
    • Update (v4.2.96): Added missing Core Audio interfaces/GUIDs. Significant API coverage expansion.
    • Update (v4.1.94): Added Packaging API interfaces (msopc.idl). Added Netaddress control defs (newer version of old IP address control, msctls_netaddress; the old one, SysIPAddress32, is still there).
    • Update (v4.0.93): Currency in new interfaces changed to LongLong.
    • Update (v4.0.92):

      -Completed Media Foundation interfaces up through the most recent Windows 11 SDK. This includes the capture engine and other entirely new feature sets.

      -Added CoreAudio Spatial Audio interfaces (newer Win10 versions/Win11 only)

      -Added IPropertyPage[2] and IPropertyPageSite interfaces.

      -Added ISimpleFrameSite interface

      -Bug fix: AUDCLNT_RETURNCODES were all incorrect.

    • Update (v3.12.88): Added misc. interfaces IDelayedPropertyStoreFactory, IStorageProviderCopyHook, IDesktopGadget/Coclass DesktopGadget, IQueryCodePage, IStreamUnbufferedInfo, IUserAccountChangeCallback, IOpenSearchSource, IDestinationStreamFactory, ICreateProcessInputs, and ICreatingProcess. Continued adding APIs and Media Foundation interfaces.
    • Update (v3.11.84, v3.11.86): Additional APIs and Media Foundation stuff.
    • Update (V3.11.82): Additional API expansion for upcoming projects. Added Media Foundation / D3D12 sync interfaces/GUIDs. Added Media Foundation Capture Engine interfaces/GUIDs. Realized I actually have a ton more Media Foundation stuff not yet included.
    • Update (v3.10.80): Additional API expansion for upcoming projects.
    • Update (v3.10.72): Added a number of important APIs for upcoming projects. Added EP_* GUIDs for IExplorerPaneVisibility, added some missing SID_ guids. tbShellLib (v1.2.7): Added IMessageFilter. NOTE: tbShellLibImpl IS NOW WORKING! I hadn't realized the old VSCode plugin was continually refusing to save settings, thus ignoring the setting to disable the autoprettifying that didn't understand interfaces and thus ran together the declares, making them invalid. This has been fixed in 1.2.7.
    • Update (v3.9.70): Reworked APIs to be more consistent when there's A/W versions. For most of these APIs, tbShellLib offers 3 versions: An explicit A version, an explicit W version, and an undecorated version that uses DeclareWide and String that's an alias for the W version. Some of the more advanced/newer APIs don't have the ANSI version declared. For APIs from oleexp/olelib without A/W but accepting strings, they've been left as LongPtr, but new ones added will use String. Also continued to add new APIs.
    • Update (v3.8.66):

      -Added IActiveScript and all related ActiveX Script Host / Engine interfaces

      -Added IDispatchEx interface and related interfaces IDispError, IVariantChangeType, IProvideRuntimeContext, IObjectIdentity, and ICanHandleException

      -Added IFileSearchBand, coclass FileSearchBand

      -Corrected some Direct3D type names that got caught up in an autoreplace unintentionally.

      -Misc bug fixes (Long->LongPtr, APIs pointing to wrong A/W version, missing A/W versions)

      -Continued expanding API coverage.
    • Update (v3.7.62): Added all remaining missing oleexp interfaces simply for completeness and not needing to qualify 'contains everything in oleexp'. IHostDialog/coclass HostDialog seemed like a major omission from those legacy interfaces so added it. Continued to substantially expand API coverage.
    • Update (v3.6.56): Numerous bug fixes to IPinnedList[2,3], including their names: IPinnedListVista->IPinnedList, IPinnedList->IPinnedList2, IPinnedList10->IPinnedList3, to be more consistent with all other sources. Please do not abuse these interfaces: Never pin without permission. Added IWinEventHandler, IFolderBandPriv, and IAccessibleObject; added coclass TaskBand, and added numerous missing IIDs.
    • Update (v3.6.54): Some items were Private that should have been Public; put SW_Flags back to SHOWWINDOW now that bug is resolved for compatibility purposes (SHOWWINDOW is in oleexp). To use this, twinBASIC Beta 269 or newer is needed. Misc bug fixes.
    • Update (v3.6.52):

      -By popular request to expand the API coverage, tbShellLib now has had tbComCtlLib merged into it. You can exclude these definitions with the TB_COMCTL_LIB_DEFINED compiler constant.

      -Substantially expanded general API coverage.

      -Misc bugfixes including renaming SHOWWINDOW enum to SW_Flags to work around a tB bug.
    • Update (v3.5.48):

      -Added accessibility UI Automation interfaces and APIs.

      ---NOTE: This API had a number of very generically named enums, like FillMode and ToggleState; these have been prefixed with Uia_ to avoid conflicts. In most cases, the actual members were left alone, with the exception of LiveSetting (renamed Uia_LiveSetting), which had Off, Polite, and Assertive; these have been prefixed with Uia_ as well.

      ---NOTE: IUIAutomation, IUIAutomationProxyFactoryMapping, IUIAutomationAndCondition and IUIAutomationOrCondition have members that use a SAFEARRAY of IUIAutomationCondition... MKTYPLIB does not support this so these return a pointer you'll need to dereference.

      -The package now includes a common helper function for interfaces: SwapVTableEntry, updated for use in both 32bit and 64bit mode.

      -Added misc interfaces ICurrentWorkingDirectory, IPropertyKeyStore, ISortColumnArray, and IBannerNotificationHandler

      -Added IHandlerInfo2, IDeskBar, IDeskBarClient amd IShellFolderBand

      -Began expanding general API coverage
    • Update (v3.4.46): Added all GDIPlus APIs and all Common Dialog APIs.
    • Update (v3.3.41): Bug fix: IExplorerBrowserEvents::NavigationFailed was misspelled.
    • Update (v3.3.40): -Inexplicably, the IDeskBand, IDockingWindow, IDockingWindowFrame, and IDockingWindowSite interfaces were missing.

      -Added ITrayBand, IDeskBand2, IDeskBandInfo, IBandHost, and IBandSite interfaces, IMenuBand, and coclasses TrayDeskBand, TrayBandSiteServices, and AddressBand.

      -Added IRegTreeItem interface

      -Added IPrintDialogCallback/IPrintDialogServices interfaces.

      -Bug fix: Certain DirectWrite interface members had ByRef Long for strings where they should have had ByVal.

      -Bug fix: SHELLSTATE had an extra member on the end (shouldn't have impacted use, but if MS changed the API to look for an exact size it would be an issue).

      -Bug fix: Attempted to correct INameSpaceTreeControlEvents context menu crashing.

      -Bug fix: INameSpaceTreeCustomDraw::ItemPrePaint was missing members.


    You can obtain the latest version from the twinBASIC package server, or download from the repository. Detailed instructions for adding from the package server can be found here.

  11. #11
    Lively Member
    Join Date
    Oct 2016
    Posts
    114

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    is tbShellLib a replacement of oleexp (can i remove oleexp from my vb6 projects and replace it with tbShellLib)

  12. #12

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    It's a replacement for oleexp only in twinBASIC at this time. If you load a VB6 project into twinBASIC, yes, this replaces oleexp in it, with some minor changes possibly needed depending on what you use detailed in the readme in the GitHub repo, although yes I should copy that here later.. At some point in the future, twinBASIC has planned support for exporting a .tlb file; when that happens tbShellLib will completely replace oleexp. oleexp can be used in twinBASIC as well, but it's not possible to compile a 64bit version, so you'd be limited to 32bit.

    But right now there's no way to load it into the VB6 IDE. For this reason I'm still keeping oleexp in terms of interfaces; all interfaces in one are added to the other.

  13. #13

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] tbShellLib - Shell Interface Library (x64-compatible successor to ole

    For everyone's enjoyment, as of the latest twinBASIC version, Beta 368, massive improvements to Intellisense mean that tbShellLib is vastly more usable, with no long delays. Intellisense is now cached and lag-free.

  14. #14

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    6,363

    Re: [twinBASIC] WinDevLib - Windows Development Library for twinBASIC (oleexp+more)

    tbShellLib is now WinDevLib - Windows Development Library for twinBASIC. This name change is to more clearly indicate the purpose: while shell programming was the original mission, there's now 5000+ APIs from all major system DLLs, and shell programming is only a small part of the whole now. The goal of this project is to make programming in tB more like programming in C/C++ with #include <windows.h> and a few others; with all APIs on tap, rather than having to add them one by one. These APIs will not be coming to oleexp unless someone writes a converter (tB->IDL), but when twinBASIC supports exporting typelibs, it will replace oleexp in VB6.

    Current version is now v7.1.286, 02 Jan 2024.

    Please follow the GitHub for updates; I rarely update this post.

    Changelog since last update:

    Code:
    **Update (v7.1.286, 02 Jan 2024):**
    -Added initial coverage of Lsa* APIs from advapi32.dll/NTSecAPI.h/LSALookup.h/ntlsa.h
    -WIC: Converted LongPtr buffer arguments to As Any, for more flexibility in what can be supplied.
    -WIC: Converted all ByVal VarPtr(WICRect) LongPtr's to ByRef WICRect.
    -(Bug fix) IWICBitmapSourceTransform::CopyPixels definition incorrect.
    -(WinDevLibImpl) Added Implements-compatible WIC interfaces for custom codec creation.
    
    **Update (v7.0.283, 01 Jan 2024):**
    -Improved enum associations/formatting for WIC.
    -Added numerous missing GUIDs from wincodecsdk.h
    -(Bug fix) IWICPalette, IWICFormatConverter, IWICBitmapDecoderInfo, IWICPixelFormatInfo2, IWICMetadataReaderInfo, IWICMetadataHandlerInfo, IWICBitmapCodecInfo, IWICComponentInfo, WICMapGuidToShortName, WICMapSchemaToName had numerous ByVal/ByRef mixups.
    
    
    **Update (v7.0.282, 01 Jan 2024):**
    -Added all variable conversion and arithmetic helpers from oleauto.h; coverage of that header now 100% (of supported by language). 
    -Additional GUIDs and error consts from olectl.h to bring that header's coverage to 100%.
    -VARCMP enum renamed VARCMPRES to avoid conflict with VarCmp API.
    -Added missing flags for VariantChangeType[Ex]
    -SHFileOperation and SHFILEOPSTRUCT did not conform to API standards. Struct names were incorrect; the operations aborted member was incorrectly defined as Boolean, but the padding bytes prevented it from failing the entire function.
    -SysAllocStringByteLen now use ByVal As Any, since either a String or LongPtr would be ByVal.
    -(Bug fix) SysAllocString definition incorrect (Long instead of LongPtr, impacting 64bit)
    -(Bug fix) SysFreeString definition incorrect (ByRef instead of ByVal)
    -(Bug fix) SysReAllocStringLen should use DeclareWide
    -(Bug fix) LHashValOfName is a macro, not an export; now implemented properly.
    -(Bug fix) FORMATETC used a Long for CLIPFORMAT, which is incorrect.
    -(MAJOR BUG FIX) IStream was missing UnlockRegion. This impacted numerous derived interfaces, throwing off their vtables, completely breaking them.
    
    **Update (v7.0.280, 28 Dec 2023):**
    -INDEXTOOVERLAYMASK was inexplicably missing; also added inverse, OVERLAYMASKTOINDEX.
    -Additional setup APIs-- newdev.h, 100% coverage, and additional cfgmgr32 APIs.
    -Additional kernel32 APIs-- processthreadsapi.h now has 100% coverage
    -(Bug fix) SetupDiGetClassDevsW did not conform to WinDevLib API standards.
    -(Bug fix) Some SetupAPI defs did not have the required 1-byte packing on 32bit
    -(Bug fix) NMLVKEYDOWN and NMTVKEYDOWN did not have required packing alignment
    
    **Update (v7.0.277, 21 Dec 2023):**
    -Added customer caller for AuthzReportSecurityEvent (experimental).
    -(Bug fix) SHEmptyRecycleBinW, PathRemoveBackslash, PathSkipRoot, CreateMailslot did not conform to API standards
    -(Bug fix) All SHReg* APIs missing W variants
    -(Bug fix) PathAddExtension, PathAddRoot, EnumSystemLanguageGroups, LoadCursorFromFile, waveInGetErrorText definitions incorrect (misplaced alias)
    -(Bug fix) PathIsDirectoryA/W, PdhAddEnglishCounterA definitions incorrect (invalid alias)
    -(Bug fix) GetLogicalDriveStringsA definition incorrect (DeclareWide on ANSI)
    -(Bug fix) Mising DeclareWide:
        Get/SetComputerName[Ex]
        All THelp32.h APIs
        SHUpdateImage
        ShellNotify_Icon
        WaveIn/OutDevCaps
        HttpQueryInfo
    
    
    **Update (v7.0.276, 20 Dec 2023):**
    -Added cryptui.dll APIs (cryptuiapi.h, 100% coverage)
    -Some additional SetupAPI and Cfgmgr32 defs, as well as devmgr.dll APIs documented and not (show device manager, prop pages, problem wizard, etc)
    -More inexplicably missing shell32 APIs
    -Additional APIs from ShellScalingAPI.h (now 100% coverage)
    -(Bug fix) Duplicated DEVPROP_TYPE_* values.
    -(Bug fix) GetExplicitEntriesFromAcl definition incorrect (misplaced Alias)
    -(Bug fix) Wow64RevertWow64FsRedirection lacked explicit ByVal modifier.
    -(Bug fix) Get/SetProcessDpiAwareness definitions incorrect.
    
    **Update (v7.0.272, 17 Dec 2023):**
    
    ***MAJOR CHANGES***
    *LARGE_INTEGER*
    I've been considering these for a long time, and decided to pull the trigger before tB goes 1.0. 
    
    The LARGE_INTEGER type is defined  in C as:
    
    ```
    typedef union _LARGE_INTEGER {
        struct {
            DWORD LowPart;
            LONG HighPart;
        } DUMMYSTRUCTNAME;
        struct {
            DWORD LowPart;
            LONG HighPart;
        } u;
        LONGLONG QuadPart;
    } LARGE_INTEGER;
    ```
    
    The Windows API, from user to native to kernel, all recognize the QuadPart member and apply 8-byte packing rules.
    VB6 and VBA (except 64bit) lack a LongLong type, so programmers have traditionally used the LowPart/HighPart option.
    This *does not* trigger 8 byte packing rules, and while problems from this are rare in 32bit mode, they're quite common
    in 64bit mode. As a result of this, WinDevLib has up until now kept the traditional definition for LARGE_INTEGER and 
    instead substituted a QLARGE_INTEGER or ULARGE_INTEGER in it's own definitions.
    This will now change. The original plan was to wait for union support which would allow both while still triggering
    the 8 byte alignment rules, but that has recently been confirmed as a post-1.0 feature. When that is added, the old
    option will be added back in.
    LARGE_INTEGER now by default uses QuadPart, and all QLARGE_INTEGER have been changed to LARGE_INTEGER.
    
    Reminder: This does greatly simplify things; you can remove all conversions to Currency and related multiply/divide 
              by 10,000. Also, note that if you use your own local definition, WinDevLib does not supercede it for your
              own code. It is strongly recommended to switch away from Currency when doing 64bit updates.
    
    A compiler flag is available to restore the old definition (but not the use of QLARGE_INTEGER in WinDevLib defs):
    WINDEVLIB_NOQUADLI
    
    *SendMessage and PostMessage*
    These will now conform to the same API standards as all other functions; the undenominated (without A or W suffix)
    will now point to SendMessageW and PostMessageW and use DeclareWide. Note that these have never affected the target
    itself, it's always just modified how String arguments are interpreted. 99% of usage of these will not be impacted
    by this, since you'll still be able to use String and not nee to modify the result for ANSI/Unicode conversion.
    PostMessage already used DeclareWide, which was perhaps causing unexpected issues in the edge cases.
    
    **Addtional changes:**
    -Added interface IActCtx and coclass ActCtx.
    -Missing WH_ enum values and associated types for SetWindowsHookEx
    -Numerous missing VK_* virtual key codes
    -Missing WM_* wParam enums.
    -Several service APIs did not conform to WinDevLib API standards with respect to A/W/DeclareWide UDT naming.
    -Added a lot of additional user32 content.
    -Added variable min/max constants from limits.h (100% coverage)
    -Redid FILEDESCRIPTOR[A,W] to use proper FILETIME types and Integer for WCHAR instead of 2x Byte.
    -Added several types associated with clipboard formats.
    -Added unsigned variable helper functions (thanks to Krool for these): UnsignedAdd, CUIntToInt, CIntToUInt, CULngToLng, and CLngToULng. CULngToLng has an override between the original Double and LongLong, CLngToULng does too but rewrites the output into an argument since tB can't overload purely based on function return type.
    -Added gesture angle macros GID_ROTATE_ANGLE_TO_ARGUMENT/GID_ROTATE_ANGLE_FROM_ARGUMENT
    -Added hundreds of additional NTSTATUS values.
    -Added overloads to LOWORD and HIWORD to handle LongLong directly.
    -winuser.h now has 100% coverage of language-supported definitions (10.0.25309 SDK); the largest header to date with this distinction with over 16000 lines in the original.
    -(Bug fix) LBItemFromPt was marked Private.
    -(Bug fix) RealGetWindowClass definition incorrect (invalid alias).
    -(Bug fix) Duplicated constant: CCHILDREN_SCROLLBAR
    -(Bug fix) PostThreadMessage definition incorrect and did not meet API standards.
    -(Bug fix) InsertMenuItem[A,W] definitions technically incorrect although not causing an error. Also did not conform to API standards.
    -(Bug fix) PostThreadMessage definition incorrect.
    -(Bug fix) PostMessageA incorrectly had DeclareWide.
    -(Bug fix) ILCreateFromPathEx was removed as it's not exported from shell32 either by name or ordinal.
    -(Bug fix) ILCloneChild, ILCloneFull, ILIsAligned, ILIsChild, ILIsEmpty, ILNext, and ILSkip are only macros; they were declared as shell32.dll functions. Some of these were aliases and modified as appropriate, the rest were implemented as functions.
    -(Bug fix) ILLoadFromStream is exported by ordinal only.
    -(Bug fix, WinDevLibImpl) IPersistFile method definition incorrect.
    
    
    **Update (v6.6.269):**
    -Added helper function GetNtErrorString that gets strings for NTSTATUS values. GetSystemErrorString already exists for HRESULT.
    -SHLimitInputEdit didn't have the ByVal attribute included, making it easy to not realize it's then required when called.
    -CreateSymbolicLink API inexplicable missing.
    -LIMITINPUTSTRUCT has been renamed to the original, correct name LIMITINPUT. The original documentation and demos have made this change too with the recently released universal compatibility update.
    
    **Update (v6.6.268, 11 Dec 2023):**
    -Added UI Animation interfaces and coclasses
    -Added Radio Manager interfaces and some undocumented coclasses to use them. Added undocumented interface IRadioManager with coclass RadioManagementAPI: This controls 'Airplane mode' on newer Windows.
    -Added IThumbnailStreamCache and coclass ThumbnailStreamCache. Note: Due to simple name potential conflicts, flags prefixed with TSC_. A ByVal SIZE is replaced with ByVal LongLong; copy into one.
    -Added additional event trace APIs; coverage of evntrace.h is now 100%.
    -Additional BCrypt APIs sufficient for basic public key crypto implementations.
    -Added additional language settings APIs from WinNls.h; coverage is near or at 100% now.
    -Added remaining transaction manager APIs; coverage of ktmw32.h is now 100%.
    -Added all remaining .ini/win.ini file APIs.
    -Added misc other APIs.
    -Added memcpy alias for RtlMoveMemory (in addition to CopyMemory and MoveMemory)
    -Several event trace APIs and transaction API improperly used 'As GUID', which is undefined in tbShellLib and will refer to the unsupported stdole GUID.
    -Reworked the way the REASON_CONTEXT union was set up; the old version would likely not work as implied.
    -(Bug fix) KSIDENTIFIER union size incorrect.
    
    **Update (v6.5.263, 06 Dec 2023):**
    -Added numerous missing shell32 APIs.
    -Some additional kernel32 APIs, bringing coverage of fileapi.h to 100%.
    -Added numerous IOCTL_DISK_* constants and associated UDTs.
    -Converted some ListView-related consts to enums to use with their associated UDTs.
    -Added missing name mappings structs for SHFileOperation.
    -(Bug fix) BITMAPFILEHEADER, DISK_EXTENT, VOLUME_DISK_EXTENT, and STORAGE_PROPERTY_QUERY typed improperly marked Private.
    -(Bug fix) STORAGE_PROPERTY_QUERY definition incorrect
    -(Bug fix) SCSI_PASS_THROUGH_BUFFERED24 definition incorrect.
    -(Bug fix) GetVolumeInformationByHandle definition incorrect.
    -(Bug fix) ReadFile did not conform to tbShellLib API conventions (ByVal As Any instead of OVERLAPPED)
    
    
    **Update (v6.5.260, 04 Dec 2023):**
    -Added all authz APIs/consts/types from authz.h; note that AuthzReportSecurityEvent is currently unsupported by the language. However, it internally calls AuthzReportSecurityEventFromParams.
    -Added many missing shlwapi APIs; URL flags enum missing values
    -Updated shlwapi "Is" functions to use BOOL instead of Long where that way in sdk.
    -Completed all currently known PROCESSINFOCLASS structs for NtQueryInformationProcess.
    -Added custom enums for PROCESS_MITIGATION_* structs
    -(Bug fix) SHGetThreadRef/SHSetThreadRef definitions incorrect
    -(Bug fix) SHMessageBoxCheck definition incorrect
    -(Bug fix) Path[Un]QuoteSpaces definitions incorrect
    
    **Update (v6.4.258), 28 Nov 2023):**
    -Large number of additional advapi security APIs (AccCtrl.h and AclAPI.h, 100% coverage)
    -Additional crypto APIs
    -(Bug fix) Missing FindFirstFileEx flag FIND_FIRST_EX_ON_DISK_ENTRIES_ONLY.
    
    **Update (v6.4.257), 26 Nov 2023):** GdipGetImageEncoders/GdipGetImageDecoders definitions "incorrect" for unclear reasons... Documentation indicates it's an array of ImageCodecInfo, which does not contain any C-style arrays, but there's a mismatch between the byte size and number of structs * sizeof. Changed to As Any to allow byte buffers in addition to oversized ImageCodecInfo buffers.
    **Update (v6.4.256, 25 Nov 2023):**
    -Added inexplicably missing basic versioning and sysinfo APIs from kernel32.
    -Added ListView subitem control undocumented CLSIDs.
    -Additional sys info classes (NtQuerySystemInformation).
    -Misc. API additions.
    -(Bug fix) GetAtomName[A,W] and GlobalGetAtomName[A,W] definitions incorrect.
    -(Bug fix) Multiple ole32 functions incorrectly passing ANSI strings.
    -(Bug fix) ListView_GetItemText was thoroughly broken.
    -(Bug fix) GetSystemDirectory definition incorrect.
    -(Bug fix) EnumPrintersA definition incorrect; GetPrinter, SetPrinter, and GetJob definitions technically incorrect but no impact unless you had redefined associated UDTs.
    -(Bug fix) UNICODE_STRING members renamed to their proper SDK names. I realize this is a substantial breaking change but it's a minor adjustment and I feel it's important to be faithful to the SDK.
    
    **Update (v6.3.253, 17 Nov 2023):**
    -Additional crypto APIs (both classic and nextgen)
    -Added GetSystemErrorString helper function to look up system error messages.
    -(Bug fix) FormatMessage did not follow W/DeclareWideString convention; last param not ByVal.
    -(Bug fix) RtlDestroyHeap has but one p.
    -(Bug fix) CoCreateInstance overloads not playing nice. Only a single form available now.
    
    **Update (v6.3.252, 11 Nov 2023):**
    -Expanded bcrypt coverage
    -Added RegisterDeviceChangeNotification and the numerous assorted consts/types (dbt.h, 100% coverage)
    -Added DISP_E_* and TYPE_E_* error messages w/ descriptions. Added additional errors and descriptions for several original oleexp error sets.
    -The WBIDM enum that was full of IDM_* values has had the values changed to WBIDM_*. IDM_ is the standard prefix for menu resources, so these would often conflict with projects not using the same resource id, and the ids here are for Win9x legacy content.
    -All the fairly useless system info UDTs and an actually useful one, SYSTEM_PROCESS_ID_INFORMATION was missing.
    -Additional shell32 APIs
    -(Bug fix) Helper function NT_SUCCESS was improperly Private
    -(Bug fix) SetupDiGetClassDevPropertySheets[W] definitions incorrect
    
    
    **Update (v6.3.250, 5 Nov 2023):**
    -Added Credential Provider interfaces from credentialprovider.h
    -Added missing TlHelp32.h APIs/structs, now covered 100%. 
    -Added several types/enums related to things already in project.
    -(Bug fix) Duplicate of NETRESOURCE type. Project was subsequently analyzed for further duplicated types, and 4 other bugs in this class were eliminated.
    -(Bug fix) No base PEB type defined.
    -(NOTICE) OpenGL is being deferred until twinBASIC has Alias support (planned).
    
    **Update (v6.3.240):**
    -Added interfaces IComputerAccounts, IEnumAccounts, IComputerAccountNotify, and IProfileNotify with coclasses LocalUserAccounts, LocalGroups, LoggedOnAccounts, ProfileAccounts, UserAccounts, and ProfileNotificationHandler. Also added numerous PROPERTYKEYs associated with this functionality.
    -Added a limited set of Winsock APIs. Note that with the exception of WSA* APIs, the short, generic names have been prefixed with ws_.
    -Misc API additions including undocumented shell32 APIs, and additional ntdll APIs.
    -Additional PE file structs
    -(Bug fix) Several WebView2 interface had incompatible Property Get defs for ByVal UDT workarounds.
    
    
    **Update (v6.2.238):**
    -Added a limited set of winhttp APIs
    -Added misc APIs for recent projects
    -(Bug fix) RegQueryValueEx/RegQueryValueExW/RegQueryValueExA definitions incorrect.
    
    **Update (v6.2.237):** Missing consts for upcoming project.
    
    **Update (v6.2.234):**
    -Added additional file info structs, exe header structs, and ntdll APIs
    -(Bug fix) Some Disk Quota interface enums had incorrect names and in some cases values.
    
    **Update (v6.2.232):** 
    -Added gdi32 Color Management (ICM) APIs. 
    -Additional sysinfo UDTs. 
    -TypeHints for NT functions missing them.
    
    **Update (v6.2.230):** 
    -Added Windows Networking (WNet) APIs (winnetwk.h, 100% coverage (mpr.dll))
    -Major expansion of internationalization API coverage from winnls.h.
    -Added numerous missing common User32 functions.
    -Misc bug fixes, inc. InsertMenuItem entry-point not found, missing menu alternates (W or A variations)
    -Added overloads for a number of functions, if you have any trouble with the following, please file a bug report:
    CoUnMarshalIface
    
    IsValidLocaleName
    EnumDateFormatsExEx
    EnumCalendarInfoExEx
    
    GetSystemDefaultLocaleName
    GetCurrencyFormatEx
    GetNumberFormatEx
    GetCalendarInfoEx
    
    SetUserGeoName
    
    GetThreadPreferredUILanguages
    SetThreadPreferredUILanguages
    SetProcessPreferredUILanguages
    GetProcessPreferredUILanguages
    
    LocaleNameToLCID
    
    GetDurationFormat
    GetDurationFormatEx
    
    GetLocaleInfoEx
    ResolveLocaleName
    
    GetNLSVersion
    GetNLSVersionEx
    
    ToUnicode
    
    LoadBitmap[A,W]
    
    ModifyMenu
    InsertMenu
    
    StgMakeUniqueName
    
    SHEvaluateSystemCommandTemplate
    SHIsFileAvailableOffline
    SHSetLocalizedName
    SHGetLocalizedName
    SHRemoveLocalizedName
    
    **Update (v6.1.229):** Bug fix: A number of APIs had missing 'As <type>` statements, which were upgraded to errors. tB had previosly not caught these.
    
    **Update (v6.1.228):**
    -Completed imm32 APIs
    -Added Job Object APIs
    -Completed Virtual Disk APIs (virtdisk.h, 100% coverage)
    -Many missing gdi32.dll APIs
    -Misc APIs, inc. some power APIs
    -All UDTs for NtQueryInformationFile (through current Win11)
    -Bug fix: GDI object enum duplicate
    -Bug fix: Some incorrect UDTs
    
    
    **Update (v6.0.220):** 
    -Added Network List Manager interfaces and coclass NetworkListManager.
    -Added WININET APis (wininet.h, 99% coverage-- autoproxy defs unsupported by language)
    -Added all APIs from iphlpapi.h (IP Helper; network stats); netioapi.h not included. Will be in future release.
    -Added all Console APIs (wincon.h/wincontypes.h/consoleapi[, 2,3].h) and Comm APIs. WinEvent APIs and consts.
    -FileDeviceTypes has been renamed DEVICE_TYPE, per usage in km
    -Added most UDTs for GetFileInformationByHandle and native equivalents.
    -Added Vista+ Thread Pool APIs, including inlined ones (threadpoolapiset.h, 100% coverage)
    -Added Windows 10+ Secure Enclave APIs (enclaveapi.h, 100% coverage)
    -dlgs.h, part of windows.h, has been added *AS AN OPTIONAL EXTENSION* due to anticipated naming conflicts with common names like 'lst1'. Add the compiler constant `TB_SHELLLIB_DLGH = 1` to include these. 
    -Bug fix: Numerous UDTs with LARGE_INTEGER changed to QLARGE_INTEGER where the lack of 8-byte QuadPart was throwing alignment off. Note that in the future, tB will have union support, at which point LARGE_INTEGER will be changed to one, and all QLARGE_INTEGER replaced.
    
    **Update (v5.3.214):** Added all DWM APIs from dwmapi.h. Added undoc'd shell app manager interfaces/coclasses. Added CPL applet defs. Misc API additions and bugfixes.
    
    **Update (v5.2.210-212):** Additional APIs for upcoming project release.
    
    **Update (v5.2.208):** Substantial API additions; inc. SystemParametersInfo structs/enums, display config, raw input, missing dialog stuff. Additional standard helper macros found in Windows headers.
    
    **Update (5.1.207):** 
    -Added PropSheet macros
    -Set PROPSHEETPAGE to V4 by default
    -Add missing PropSheet consts
    -Bug fix: PROPSHEETHEADER definitions incorrect
    -Bug fix: PostMessage API not 64bit compatible
    -Bug fix: Several ListView macros not 64bit compatible
    
    **Update (5.1.206):** 
    -Updated WebView2 to match 1.0.1901.177. 
    -Completed all advapi32 registry functions.
    -Expanded Media Foundation APIs.
    -Bug fix: Property Sheet callback enums were missing values and improperly organized.
    -Misc bug fixes and additions to APIs.
    
    **Update (v5.0.203):** Bug fix: D3DMATRIX layout with 2d array was incorrect.
    
    **Update (v5.0.201):** 
    -Added some missing DirectShow media stream interfaces. 
    -Complete coverage of winmm API sets for wave, midi, time, sound, mmio, joystick, mci, aux, and mixer.
    -Complete coverage of printer and print spooler APIs from winspool.
    -Major expansion of security-related APIs
    -Added D3D compiler APIs and effects interfaces; 
    -Added basic DirectSound interfaces/apis.
    -Bug fix: ShowWindow relocated to slShellCore.twin to avoid amibiguity with SHOWWINDOW enum.
    -Bug fix: Misc. bug fixes to APIs.
    
    **Update (v4.16.193):** Small API update for upcoming project; some resource loading APIs were missing.
    
    **Update (v4.16.191):** Bug fix: Multiple instances of errors for auto-declaring Variants, Bug fix: `GetClipboardData` incorrectly returned a Long (should be LongPtr).
    
    **Update (v4.16.190):** Critical bug fix: TB_SHELLLIB_LITE mode was broken. Added additional DirectX errors w/ desciprtions. Added initial D3D compiler apis, note that by default, these direct to d3dcompiler_47.dll, however you can specify compiler flag D3D_COMPILER = 44, 45, and 46 to use those.
    
    **Update (v4.15.188):** Added SAFEARRAY APIs for manual operations on them and some more TypeLib-related APIs.
    
    **Update (v4.14.185):** Bug fix: lstrcmp, lstrcmpi, and lstrcat declarations were incorrect. Some additional [ TypeHint ] attributes add.
    
    **Update (v4.14.184):** Added SxS Assembly interfaces and APIs. Added MAKEINTRESOURCE macro. Added additional error messages. Made TaskDialogIndirect returns Optional per MSDN.
    
    **Update (v4.14.182):** Added missing kernel32 string functions. Added SUCCEEDED helper function.
    
    **Update (v4.14.181):** Bug fix: CHARFORMAT2[A|W] was incorrectly declared.
    
    **Update (v4.14.180):** Much more extensive coverage of PROPVARIANT and Variant helpers for supported VB types (use changetype first to use them with unsigned et al).
    
    **Update (v4.14.178):** Added partial Virtual Disk APIs and unsigned PROPVARIANT helpers.
    
    **Update (v4.13.177):** Bug fix: Helper function UI_HSB had a syntax error.
    
    **Update (v4.13.175):** Ribbon UI IIDs were missing.
    
    **Update (v4.13.174):** Added caret APIs. Bug fix: Certain DirectWrite interfaces had members incompatible with x64. *IMPORTANT:* Having a single format for both 32 and 64bit breaks compatibility with the 32bit-only version. Previously `DWRITE_TEXT_RANGE` arguments were passed as two separate arguments, you'll now need to copy them to a single LongLong to pass.
    
    **Update (v4.12.172):** User info APIs added.
    
    **Update (v4.12.171):** No change; version number incremented to test package manager.
    
    **Update (v4.12.170):** Bug fix: IOleInPlaceSite::Scroll scrollExtant should be ByVal. Added common error consts w/ descriptions.
    
    **Update (v4.12.166):**
    -Added HTMLHelp APIs and misc ones that should be grouped with existing sets.
    
    -New option: tbShellLib now has a 'Lite mode' designed to increase performance for users who typically define APIs themselves. In this mode, all API definitions in slAPI and slAPIComCtl are excluded, as are all misc API enums/types/consts in slDefs, and mPKEY.
    
    -To use Lite mode, go to your project settings, go to 'Project: Conditional compilation constants', ensure it's checked to enable, and add `TB_SHELLLIB_LITE = 1`.
    
    **Update (v4.11.164):** Added Sensor APIs and Location APIs, including all related GUIDs/PKEYs from sensors.h. Added some APIs that belong with the previously added ones; major additions are likely over for now. Misc bugfixes to APIs.
    
    **Update (v4.10.160):** Added IStorageProviderHandler and IStorageProviderPropertyHandler. Substantial updates to API sets.
    
    **Update (v4.9.154):** Updated WebView2 interface set to latest stable release, v1.0.1774.30. Added additional APIs, focusing on Setup APIs, NTDLL, and data protection APIs.
    Last edited by fafalone; Jan 2nd, 2024 at 10:04 AM.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width