Associer un handle (en VB.NET) sur un Event (en C#) : OLA !
Bonjour,
Si vous avez une quelconque information sur le sujet suivant, je suis preneur !
Sous Visual Studio (2010), j'ai une solution multiprojets :
- avec du C#, et notamment une classe avec des Events qui m'intéressent,
- et une fonction que je souhaite associer à un de ces Event, qui est codé est VB.NET.
Comment faire ? Enfin surtout : Est-ce possible ?
Peut-on faire l'association en VB.NET d'une méthode/fonction avec un event dans une classe codé en C# ?
Merci pour toutes pistes...
appeler un handler vb.net de c#
bonjour
De .net framework à .net framework c'est possible.
Attention aux marshalling des types dans les arguments entre vb.net et c#.
Les types "blittatables" savoir les types valeurs int,double,string boolean ne posent pas de probleme.
Les types "personnalises" (classe,structure) en argument doivent "mappes" correctement pour se correspondre dans les 2 languages.
Attention au passage par adresse et valeur qui doit etre precise explicitement dans les "wrapper" vb.net à savoir :
- byval passage par valeur
- byref passage par adresse(ou reference)
Attention à la porte en VB.Net c'est du public.
voici un exemple:
code c#:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
//classe AlarmClass avec evenement
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{
class AlarmClass
{
// Declare the delegate
public delegate void AlarmHandler(string s);
// Declare the event member that is of type AlarmEventHandler.
public event AlarmHandler Alarm;
public AlarmClass()
{
}
public void Starting()
{
string msg = "hello c#";
OnAlarm(msg);
}
// Define a method that raises an event.
protected virtual void OnAlarm(string s)
{
// Instantiate the delegate.
AlarmHandler handler = Alarm;
if (handler != null)
{
// Invokes the delegates.
handler( s);
}
}
}
}
// Forme pour initialiser AlarmClass
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//REFERENCE AU Projet Biblio VB.NET
using ClassLibVbNet;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private AlarmClass objAlarm;
public Form1()
{
InitializeComponent();
this.objAlarm=new AlarmClass();
//Declaration du Nouveau Handler comme pour un handler en c#
this.objAlarm.Alarm += new AlarmClass.AlarmHandler(ClassLibVbNet.Module1.vbAlarm);
}
private void btnEventVB_Click(object sender, EventArgs e)
{
this.objAlarm.Starting();
}
} |
code projet librairie vb.net:
Code:
1 2 3 4 5 6 7 8 9 10
|
Imports System.Windows.Forms
'Portee :Public pour l'acces
Public Module Module1
'Passage de string par valeur
'Portee :Public
Public Sub vbAlarm(ByVal s As String)
MessageBox.Show("vb.net " & s)
End Sub
End Module |
bon code....