Hi, I'd like to start off by saying that I'm not sure whether this is the preferred place to post patches. If not, you may want to start writing your reply now.
Recently IronPython sparked my interest in using DirectX from Python, however I've run into a couple of issues. One of which I've been able to fix...as far as I can tell anyway. Here is a demonstration of the problem: IronPython 0.7.6 on .NET 2.0.50215.44 Copyright (c) Microsoft Corporation. All rights reserved. >>> import sys >>> sys.LoadAssemblyByName('System') >>> sys.LoadAssemblyByName('Microsoft.DirectX') >>> import System, Microsoft.DirectX >>> Microsoft.DirectX.Matrix <type 'Microsoft.DirectX.UnsafeNativeMethods+Matrix'> >>> Microsoft.DirectX.UnsafeNativeMethods.Matrix <type 'Microsoft.DirectX.UnsafeNativeMethods+Matrix'> Hrm...that's not right. This matters because Microsoft.DirectX.Matrix provides more functionality than Microsoft.DirectX.UnsafeNativeMethods.Matrix; this problem actually crops up with a number of other objects in the Microsoft.DirectX namespace, namely Vector3, Quaternion, etc. So, I went investigating... >>> A = System.Reflection.Assembly.LoadWithPartialName('Microsoft.DirectX') >>> M1, M2 = [t for t in A.GetExportedTypes() if >>> t.FullName.endswith('Matrix')] >>> M1 Microsoft.DirectX.Matrix >>> M2 Microsoft.DirectX.UnsafeNativeMethods+Matrix >>> M1.Name 'Matrix' >>> M2.Name 'Matrix' >>> M1.FullName 'Microsoft.DirectX.Matrix' >>> M2.FullName 'Microsoft.DirectX.UnsafeNativeMethods+Matrix' Logically enough, Microsoft.DirectX.Matrix and Microsoft.DirectX.UnsafeNativeMethods.Matrix both report their name as "Matrix" but not their full name. Following the codepath lead me to IronPython.Objects.ReflectedPackage, where I found the problem: GetCoreTypeName. It returns, for all intents and purposes, the type's Name property, which the calling functions then use as a key to map the type to. Of course, this causes a problem when two objects have the same name, which would explain the craziness, after calming down, I was seeing. I've attached a patch that appears to fix the problem. For interest's sake, after applying my patch: IronPython 0.7.6 on .NET 2.0.50215.44 Copyright (c) Microsoft Corporation. All rights reserved. >>> import sys >>> sys.LoadAssemblyByName('System') >>> sys.LoadAssemblyByName('Microsoft.DirectX') >>> import System, Microsoft.DirectX >>> Microsoft.DirectX.Matrix <type 'Microsoft.DirectX.Matrix'> >>> Microsoft.DirectX.UnsafeNativeMethods.Matrix <type 'Microsoft.DirectX.UnsafeNativeMethods+Matrix'> I'm not sure if I've fixed this The Right Way, but I've attached my patch anyway. -- Jonathan
namespace-collisions.patch
Description: Binary data
_______________________________________________ users-ironpython.com mailing list users-ironpython.com@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com