Great job! this is why open source succeeds... Let's hope that the ironPython team accepts your efforts.

Anthony

On 7/1/05, Jonathan Jacobs <[EMAIL PROTECTED]> wrote:
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


_______________________________________________
users-ironpython.com mailing list
users-ironpython.com@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com




_______________________________________________
users-ironpython.com mailing list
users-ironpython.com@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to