[IronPython] Viewlets: Any F# experts here?

Michael Foord fuzzyman at voidspace.org.uk
Fri Jun 27 06:45:56 PDT 2008


Curt Hagenlocher wrote:
> A bit of quality time with Reflector shows that there's a 
> _viewletsProxy object which hasn't been initialized.  You probably 
> need to call VSLabFSICore.Viewlets.Init() first.  It's static, and in 
> the vslabfsicore module.

Thanks Curt - your reflector-fu is greater than mine. I should spend 
some quality time with it.

Your advice gets me to the next step, I can make a GraphControl flash 
momentarily into view (on creation), but attempting to show it causes 
another explosion:

C:\compile\VSLab>C:\compile\IronPython-2.0B3\ipy.exe -X:ExceptionDetail 
viewlet.
py
Operation unavailable (Exception from HRESULT: 0x800401E3 
(MK_E_UNAVAILABLE))
   at System.Runtime.InteropServices.Marshal.GetActiveObject(Guid& 
rclsid, IntPt
r reserved, Object& ppunk)
   at System.Runtime.InteropServices.Marshal.GetActiveObject(String progID)
   at VSLabFSICore.Viewlet.Show()
   at GraphViewlet.GraphControl.Show()
   at _stub_$28##26(Closure , CallSite , CodeContext , Object )
   at _stub_MatchCaller(Object , CallSite , Object[] )
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at 
Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite
 site, T0 arg0, T1 arg1)
   at S$2.Initialize(CodeContext )
   at IronPython.Hosting.PythonCommandLine.RunFileWorker(String fileName)
   at IronPython.Hosting.PythonCommandLine.RunFile(String fileName)
EnvironmentError: Operation unavailable (Exception from HRESULT: 
0x800401E3 (MK_
E_UNAVAILABLE))

The code that produces this is:

import clr
clr.AddReference('vslabfsicore')
clr.AddReference('vslabviewlets')

from VSLabFSICore import Viewlets
from GraphViewlet import GraphControl

Viewlets.Init()
g = GraphControl()
g.Show()

If instead of 'g.Show()' I attempt 'dir(g)' I get a very odd error!

C:\compile\VSLab>C:\compile\IronPython-2.0B3\ipy.exe -X:ExceptionDetail 
viewlet.
py
'this' type cannot be an interface itself.
   at System.RuntimeTypeHandle.GetFirstSlotForInterface(IntPtr 
interfaceHandle)
   at System.RuntimeType.GetInterfaceMap(Type ifaceType)
   at 
Microsoft.Scripting.Generation.CompilerHelpers.TryGetCallableMethod(Method
Info method)
   at 
Microsoft.Scripting.Generation.CompilerHelpers.FilterNonVisibleMembers(Typ
e type, MemberInfo[] foundMembers)
   at IronPython.Runtime.Types.TypeInfo.MemberBinder.GetMember(Type 
type, String
 name, BindingFlags flags)
   at 
IronPython.Runtime.Types.TypeInfo.StandardResolver.ResolveMember(MemberBin
der binder, DynamicAction action, Type type, String name)
   at 
IronPython.Runtime.Types.TypeInfo.MemberResolver.ResolveMembers(MemberBind
er binder, DynamicAction action, Type type)
   at IronPython.Runtime.Types.TypeInfo.GetResolvedMembers(MemberBinder 
memberBi
nder, DynamicAction action, Type type)
   at 
IronPython.Runtime.Calls.PythonBinder.ResolveMemberNames(CodeContext conte
xt, PythonType type, PythonType owner, Dictionary`2 memberNames)
   at IronPython.Runtime.Types.PythonType.GetMemberNames(CodeContext 
context, Ob
ject self)
   at IronPython.Runtime.Operations.PythonOps.GetAttrNames(CodeContext 
context,
Object o)
   at IronPython.Runtime.Builtin.dir(CodeContext context, Object o)
   at _stub_$26##24(Closure , CallSite , CodeContext , Object , Object )
   at _stub_MatchCaller(Object , CallSite , Object[] )
   at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)
   at 
Microsoft.Scripting.Actions.UpdateDelegates.Update3[T,T0,T1,T2,TRet](CallS
ite site, T0 arg0, T1 arg1, T2 arg2)
   at S$2.Initialize(CodeContext )
   at IronPython.Hosting.PythonCommandLine.RunFileWorker(String fileName)
   at IronPython.Hosting.PythonCommandLine.RunFile(String fileName)
ValueError: 'this' type cannot be an interface itself.


Incidentally, even when installed with VS Pro I can't get VSLab to work 
*anyway* (this is Vista 64bit FWIW), so the code may not be ready for 
prime time.

I may try firing up reflector myself and see where it takes me.

Michael Foord

>
> On Thu, Jun 26, 2008 at 2:58 PM, Michael Foord 
> <fuzzyman at voidspace.org.uk <mailto:fuzzyman at voidspace.org.uk>> wrote:
>
>     The viewlets that come with VSLab look *really* cool. They're
>     based on F# so I decided to see if they could be used from IronPython.
>
>     http://www.codeplex.com/vslab
>
>     The dependencies are pretty hefty. You need F# installed *and*
>     Managed DirectX (June 2008 SDK ~450mb seems to fulfil the dependency).
>
>     To get at the viewlet assemblies you need Visual Studio Pro
>     installed as well, but they can be extracted from the VSLabs msi
>     installer without VS Pro.
>
>     Ok, so with all the dependencies installed I attempt to use them -
>     and *boom*. Anyone here got any ideas?
>
>     IronPython 2.0 Beta (2.0.0.3000) on .NET 2.0.50727.1434
>     Copyright (c) Microsoft Corporation. All rights reserved.
>     >>> import clr
>     >>> clr.AddReference('vslabfsicore')
>     >>> clr.AddReference('vslabviewlets')
>     >>> clr.AddReference('vslabcore')
>     >>> from GraphViewlet import GraphControl
>     >>> g = GraphControl()
>     Traceback (most recent call last):
>      File "<stdin>", line 1, in <module>
>      File "vslabviewlets", line unknown, in .ctor
>      File "vslabfsicore", line unknown, in .ctor
>      File "System.Windows.Forms", line unknown, in get_Controls
>      File "System.Windows.Forms", line unknown, in get_Properties
>     SystemError: Object reference not set to an instance of an object.
>
>
>     Interesting that the explosion is inside winforms. Referencing
>     that assembly first makes knows difference.
>
>     Michael Foord
>
>
>     -- 
>     http://www.ironpythoninaction.com/
>     http://www.voidspace.org.uk/
>     http://www.trypython.org/
>     http://www.ironpython.info/
>     http://www.theotherdelia.co.uk/
>     http://www.resolverhacks.net/
>
>     _______________________________________________
>     Users mailing list
>     Users at lists.ironpython.com <mailto:Users at lists.ironpython.com>
>     http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>   


-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/
http://www.trypython.org/
http://www.ironpython.info/
http://www.theotherdelia.co.uk/
http://www.resolverhacks.net/



More information about the Users mailing list