PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Caméra Dino-Lite et assemblages .NET
Caméra Dino-Lite et assemblages .NET
Iniciado por Adri1b, 16,jul. 2020 12:38 - 3 respuestas
Miembro registrado
182 mensajes
Publicado el 16,julio 2020 - 12:38
Bonjour,
Pour un projet, nous avons fait le choix de remplacer notre caméra par un modèle de la marque Dino-Lite.
La caméra dispose d'un bouton permettant de déclencher, par exemple, la prise d'une photo, d'un enregistrement vidéo, etc.
Pour pouvoir récupérer l'action sur ce bouton, il faut utiliser deux fichiers d'assemblage .NET (basé sur VideoCapX d'après mes recherches).

J'ai donc ajouté les deux fichiers DLL dans les assemblages .NET de WD, ainsi que l'assemblage "System".
J'ai créé un champ .NET intitulé par défaut "WinForm1".
Voici ci-dessous le code que j'ai mis :

MicroTouchDelegate est un DNVideoXLib._DDNVideoXEvents_MicroTouchPressedEventHandler dynamique

WinForm1.VideoDeviceIndex = 0
WinForm1.UseVideoFilter = DNVideoXLib.vcxUseVideoFilterEnum.vcxBoth
WinForm1.VideoRenderer = DNVideoXLib.vcxVideoRendererEnum.vcxGDI

WinForm1.Connected = Vrai
WinForm1.PreviewScale = Vrai
WinForm1.Preview = Vrai

WinForm1.LightOn(1)
WinForm1.EnableMicroTouch(Vrai)

MicroTouchDelegate = DotNetDélégué(IsPressed, "DNVideoXLib._DDNVideoXEvents_MicroTouchPressedEventHandler")
WinForm1:add_MicroTouchPressed(MicroTouchDelegate)

Sur la dernière ligne, j'ai systématiquement ce message d'erreur :

L'invocation de la méthode  du type  a échoué
Le framework .NET a renvoyé l'erreur suivante : 
Impossible de convertir l'objet de type 'DNVideoXLib._DDNVideoXEvents_MicroTouchPressedEventHandler' en type 'System.EventHandler'.

Pile des appels :
Demande de mise à jour de l'affichage de Win_Main (Win_Main), ligne 15

Date : 16/07/2020 12:34:04
Projet : WD Dino-Lite (16.00Cj)

Informations supplémentaires :
Code erreur : 200002
Module : 'wd250net4.dll (01F250089f - 25.0.329.0)
Informations de débogage :
System.ArgumentException: Impossible de convertir l'objet de type 'DNVideoXLib._DDNVideoXEvents_MicroTouchPressedEventHandler' en type 'System.EventHandler'.
   à System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast)
   à System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr)
   à System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
   à System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   à CDotNetMethod.bInvoke(Char* pszTypeName, Char* pszMethodName, Char* pszParameters, MethodInfo gcMethod, Object gcObj, CSLevel* pclPile, Int32 nNbParamPile, Int32 bValeurRetour, STOperationDotNet* pstOperation)
EIT_EXCEPTIONDOTNET
EIT_TYPE_WDFILE : <2>
EIT_IDCODE : <234>


Au cas où, je donne le code sous VB.Net qui concerne cette fameuse action :

Public WithEvents v As AxDNVIDEOXLib.AxDNVideoX

    Private Sub MicroTouch_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MicroTouch.CheckedChanged
        If MicroTouch.CheckState = 1 Then
            v.EnableMicroTouch(True)
        Else
            v.EnableMicroTouch(False)
        End If
    End Sub

    Private Sub v_MicroTouchPressed(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles v.MicroTouchPressed
        If MicroTouch.CheckState = 1 Then Command3_Click(Command3, New System.EventArgs())
    End Sub

    Private Sub Command3_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command3.Click
        Dim f As New Form2
        If v.Preview Then
            On Error GoTo errhand
            f.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None
            f.BackgroundImage = v.GrabFrame
            f.Show()
            'f.BackgroundImage.Save("c:\sample.bmp")
            v.SaveFrame("c:\sample.bmp")
            Exit Sub
errhand:
            f = Nothing
            Exit Sub
        End If
    End Sub


Merci beaucoup par avance si quelqu'un peut me dépanner, car cela fait plusieurs semaines que je cherche et que j'essaie plusieurs méthodes mais rien n'y fait ;(.
Miembro registrado
962 mensajes
Publicado el 16,julio 2020 - 15:00
hello,
et si tu remplaces les deux dernières lignes par :
WinForm1:add_MicroTouchPressed(DotNetDélégué("IsPressed", "System.EventHandler"))


--
Ami calmant, J.P
Miembro registrado
182 mensajes
Publicado el 17,julio 2020 - 11:32
Hello Jurassic Pork,
Ça fonctionne effectivement avec cet argument.
Merci beaucoup ;).
Miembro registrado
182 mensajes
Publicado el 20,julio 2020 - 17:59
Bonjour,
J'espère que tu verras ce message @Jurassic Pork.
Je sais que la question n'a pas grand chose à voir avec la demande initiale, mais elle est indirectement liée en fait ;).
Je voulais s'il était normal que le champ .Net disparaisse quand je clique dessus.
Il n'y a aucun événement sur ce champ, et il n'est pas possible de le rendre cliquable dans ses propriétés.
Merci par avance :).