[Mono-dev] C++ embedding

Denis ERCHOFF d_erchoff at hotmail.com
Tue Mar 21 07:14:25 EST 2006


Thank you,

As you mentioned, i am not permitted to change the .Net class design ...

I didn't thought about the debugger design ... thank, i will do some 
research in this way :).


Jonathan Pryor a écrit :
> On Mon, 2006-03-20 at 18:02 +0100, Denis ERCHOFF wrote:
>   
>> Hi all,
>>
>> I am controlling some .Net class from C++ application.
>>
>> I would like to know if from the C++ context i can add a "delegate like" 
>> to a .Net property.
>> I want to catch when a property's getter or a property's setter is 
>> called from .Net context.
>> I need to do some works when a public/private property is changed in the 
>> Net environement.
>>     
>
> Something similar to this can be done with the use of events.  See this
> (uncompiled but should be reasonably close) example:
>
>         class Interesting {
>                 private int property;
>                 
>                 public int Property {
>                         get {
>                                 EventHandler e = PropertyAccessed;
>                                 if (e != null) e (this, new EventArgs
>                                 ());
>                                 return this.property;
>                         }
>                         set {
>                                 EventHandler e = PropertyChanged;
>                                 if (e != null) e (this, new EventArgs
>                                 ());
>                                 this.property = value;
>                         }
>                 }
>                 
>                 // use an event to let code know when Property changed
>                 public event EventHandler PropertyAccessed;
>                 
>                 // use an event to let code know when Property changed
>                 public event EventHandler PropertyChanged;
>         }
>         
>         class NativeCode {
>                 [DllImport ("native")]
>                 public static extern void NativeFunction ();
>         }
>         
>         class Test {
>                 public static void Main ()
>                 {
>                         Interesting i = new Interesting ();
>                         i.PropertyChanged += 
>                         	delegate {NativeCode.NativeFunction ();}
>                         i.PropertyAccessed +=
>                         	delegate {NativeCode.NativeFunction ();}
>                         i.Property = 42;
>                 }
>         }
>
> You'd probably want to change the type of the events to something more
> reasonable (so that you know what the current property value is), and
> NativeCode.NativeFunction should probably take some parameters, but
> something like that should allow your C/C++ code know when a C# property
> is accessed or changes.
>
> The downside is that this requires changes to the C# code.  If you don't
> want to do any changes to the C# code, you're basically requiring a
> debugger, so you should check out the debugger sources (and try to get
> them working)...
>
>  - Jon
>
>
>
>
>   



More information about the Mono-devel-list mailing list