2009-12-21 9 views
0

J'essaye de construire un programme extensible où les utilisateurs, entre autres choses, peuvent créer leurs propres effets de shader.IronPython: Problème de construction d'un WPF ShaderEffect

Google en cherchant m'a permis d'aller aussi loin.

class Test(ShaderEffect): 
    inputProperty = ShaderEffect.RegisterPixelShaderSamplerProperty("Input", type(Test()), 0) 

Mais je reçois toujours l'erreur;

TypeError: cannot access protected member RegisterPixelShaderSamplerProperty without a python subclass of ShaderEffect.

Toute aide serait grandement appréciée.

La meilleure source sur le net que je pouvais trouver is linked here

+0

Cela sonne vraiment comme un bug en ce que les membres statiques ne sont pas exposés publiquement une fois est défini une classe de base. –

Répondre

0

Vous devrez utiliser la réflexion pour accéder memeber protégée de classe .NET - vous ne disposez pas d'une sous-classe Python où vous pouvez accéder à ce membre directement.

Essayez somethink comme ça (je have't testé):

inputPropertyType = ShaderEffect.GetType().GetMember(
    'RegisterPixelShaderSamplerProperty', 
    BindingFlags.Instance | BindingFlags.NonPublic) 
inputProperty = inputPropertyType.GetValue(ShaderEffect, None) 
inputProperty("Input", type(Test()), 0) 
+0

Merci Lukas, je ne savais pas que cela pouvait être fait. J'ai essayé; class Test (ShaderEffect):.. Passer inputProperty = Test() GetType() GetMember ('RegisterPixelShaderSamplerProperty', BindingFlags.Static) ("entrée", type (Test()), 0) Mais je reçois l'erreur; MemberInfo [] n'est pas appelable? –

+0

Mon erreur - vous devez trouver la valeur. Essayez la version modifiée. –