2010-12-15 205 views
0

Je deviens fou sur ce problème au cours des deux dernières semaines. J'ai un objet C# Com qui doit envoyer des notifications de modification de propriété à un objet Com C++. Un équivalent dans VB utiliserait le code qui ressemble à ceci: PropertyChanged "propertyName".Comment tirer la propriété a modifié les notifications de C# à COM en utilisant IPropertyNotifySink?

En C++, l'équivalent d'utiliser la classe CFirePropNotifyEvent d'ATL. Les objets COM C++ COM et VB COM n'implémentent pas d'interface d'événements spécialisée, donc les équivalents sont donnés ci-dessus. L'objet COM C++ devant contenir l'événement est basé sur IPropertyNotifySink, afaik.

Quel est l'équivalent en C#? i ont essayé:

  1. INotifyPropertyChanged de System.ComponentModel
  2. Je IObjectWithSite et mis en œuvre essayé de jeter l'objet site a reçu en SetSite à IPropertyNotifySink.
    1. Je ne peux pas trouver un équivalent pour CFirePropNotifyEvent en C++/ATL qui est ce que le code C++ utilise ..

S'il vous plaît aider ..

Merci à l'avance ..

Répondre

1

Je ne pense pas qu'il existe une passerelle automatique entre INotifyPropertyChanged de .NET et INotifyPropertySink de COM.

Si vous souhaitez qu'un objet .NET fournisse des événements COM, vous devez fournir une implémentation de IConnectionPointContainer dans ces objets .NET.

IConnectionPointContainer existe déjà dans .NET dans l'espace de noms System.Runtime.InteropServices.ComType.

+0

hmm .. bon point .. j'ai eu un (infructueux) aller à la mise en œuvre que .. y at-il de l'aide disponible (génériques impl/échantillon ??) – user543923

+0

Il est difficile à trouver. Si vous voulez vraiment aller dans cette voie, je suggère de plonger dans Reflector et de regarder autour de l'interface, également autour de la classe AxHost qui est le wrapper CLR pour les objets AciveX. Ce n'est pas documenté, mais Reflector peut en dire beaucoup à ce sujet. Sinon, vous pouvez conseiller votre propre mécanisme «événementiel» en utilisant un délégué, des rappels, etc. Si c'est possible dans votre contexte, c'est beaucoup plus simple. –