I am not using the ActiveX DLL outside VB6. It is not referenced in tB. If I need something from it in tB, I can just include the corresponding "twin" file with interface definitions. That's why I said it could be made into a package. Maybe I could publish one if you want to take a look at it.

You are probably right, it shouldn't take long to figure out mktyplib/midl but I'm still reluctant to start from scratch and I'm definitely not a fan of IDL syntax which is prone to so many errors. It is a lot more convenient to write interface definitions in the tB IDE (with all its quirks) using familiar VB-friendly syntax. tB will tell you in real time if you made a typing mistake or what interfaces still need to be declared. When there are no more errors in the immediate panel then you can be sure everything is ready to be compiled for testing.

WinRT stuff is definitely not hard to figure out once you overcome an initial learning curve that is inevitable when you are not familiar with .NET concepts. For example, each async method returns an IAsyncOperation of the desired type and in turn that invokes its corresponding IAsyncOperationCompletedHandler that can be implemented in VB/tB.

Also, Arrays are called Vectors, each Vector has a corresponding VectorView interface that is read-only and implements a pair of IIterable/IIterator interfaces that are used for enumerating the Vector (this is the "For Each..." syntax in .NET). All these interfaces have the same methods, just the parameter type is different and therefore they have a different GUID for each parameter type (Vector of strings, integers, booleans, objects, etc).

Exactly the same thing applies for a collection (which is called Map) where each element is a KVP (KeyValuePair) with the key always of type string and the value of whatever type you want to have in the collection.

Once you have figured this out, it all becomes just a tedious grind of copy-pasting interfaces and looking up GUIDs...