IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Code VB vers code Windev [WD15]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 137
    Par défaut Code VB vers code Windev
    Bonjour à tous,

    j'ai récupérer du code VB qui permet de comparer 2 chaines et qui retournent un %.
    Je bloque à plusieurs partie du code VB car je n'en ai jamais fait.

    le VB:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Declare Sub RtlMoveMemory Lib "kernel32" (Destination As Any, Source As Any, ByVal Length As Long)
    Private b1() As Byte
    Private b2() As Byte
     
    Public Function Comparer(ByVal string1 As String, ByVal string2 As String) As Double
      Dim len1 As Long
      Dim len2 As Long
      string1 = UCase$(string1)
      string2 = UCase$(string2)
      If string1 = string2 Then
        Comparer = 1
      Else
        len1 = Len(string1)
        len2 = Len(string2)
        ReDim b1(1 To len1)
        ReDim b2(1 To len2)
        RtlMoveMemory b1(1), ByVal string1, len1
        RtlMoveMemory b2(1), ByVal string2, len2
        Comparer = SubSim(1, len1, 1, len2) / (len1 + len2) * 2
      End If
    End Function
     
    Private Function SubSim(st1 As Long, end1 As Long, st2 As Long, end2 As Long) As Long
      If Not (st1 > end1 Or st2 > end2 Or st1 <= 0 Or st2 <= 0) Then
        Dim c1 As Long
        Dim c2 As Long
        Dim ns1 As Long
        Dim ns2 As Long
        Dim i As Long
        Dim max As Long
        For c1 = st1 To end1
          For c2 = st2 To end2
            i = 0
            Do Until b1(c1 + i) <> b2(c2 + i)
              i = i + 1
              If i > max Then
                ns1 = c1
                ns2 = c2
                max = i
              End If
              If c1 + i > end1 Or c2 + i > end2 Then Exit Do
            Loop
          Next c2
        Next c1
        SubSim = max + SubSim(ns1 + max, end1, ns2 + max, end2) + SubSim(st1, ns1 - 1, st2, ns2 - 1)
      End If
    End Function
    mon code windev pour l'instant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    PROCEDURE Comparer(string1 est une chaîne,string2 est une chaîne)
    b1_ est un tableau d'entier
    B2_ est un tableau d'entier
     
    nLengh1 est un entier
    nLengh2 est un entier
     
    string1 = Majuscule(string1)
    string2 = Majuscule(string2)
    nTest est un entier
     
    SI string1 = string2 ALORS
    	nTest = 1
    SINON
    	nLengh1 = Taille(string1)
    	nLengh2 = Taille(string2)
     
    	TableauAjoute(b1_,nLengh1)
    	TableauAjoute(B2_,nLengh2)
     
    	AppelDLL32("kernel32","RtlMoveMemory",b1_[1],string1,nLengh1) 
    	AppelDLL32("kernel32","RtlMoveMemory",B2_[2],string2,nLengh2) 
    	nTest = subSim(1, nLengh1, 1, nLengh2) / (nLengh1 + nLengh2) * 2
     
    FIN
    RENVOYER nTest
    //
    PROCEDURE subSim(st1,st2,end1,end2)
     
    SI PAS (st1 > end1 OU st2 > end2 OU st1 <= 0 OU st2 <= 0) ALORS
    	c1 est un entier
    	c2 est un entier
    	nS1 est un entier
    	nS2 est un entier
    	i est un entier
    	nMax est un entier
    	nTest est un entier
    	POUR c1 = st1 A end1
    		POUR c2 = st2 A end2
    			i = 0
    			TANTQUE b1[c1 + i] <> b2[c2 + i]
    				i = i +1
    				SI i > 	nMax ALORS
    					nS1 = c1
    					nS2 = c2
    					nMax = i
    				FIN
    				SI c1 + i > end1 OU c2 + i > end2 ALORS
     
    				FIN
    			FIN
    			c2++
    		FIN
    		c1++		
    	FIN	
    FIN
    nTest = nMax + subSim(nS1+nMax, end1, nS2 + nMax , end2) + subSim(st1,nS1-1,st2,nS2 - 1)
     
    RENVOYER nTest
    Pour l'instant mon erreur se situe dans l'appel de RtlMoveMemory

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Que s'est-il passé ?
    La fonction 'RtlMoveMemory' de la DLL kernel32 a provoqué une erreur d'exécution.
    Si vous pouviez me donnez un petit coup de pouce..
    Merci !

  2. #2
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Par défaut
    Bonjour
    tu ne sais pas où cela pplante dans ton appel de fonction ?
    si c'est lors de l'appel, lors de l'execution...
    Essaye d'afficher des messages pour savoir où cela s'arrête

    Gancau

  3. #3
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 564
    Par défaut
    Je viens de regarder dans wdapi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UNALIGNEDDestination est un entier  // Pointeur 
    UNALIGNEDSource est un entier  // Pointeur 
    Length est un entier // Type C :DWORD
     
    API("WINNT","RtlMoveMemory",UNALIGNEDDestination,UNALIGNEDSource,Length)
    et sur msdn : http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    Ta librairie appelée n'est pas la bonne : winnt / kernel32 (à verifier suivant OS ?)
    Tes types ne correspondent pas avec ceux attendus. Tu balances des chainées alors qu'il attend des pointeurs (adresse mémoire -> entiers).

    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	AppelDLL32("winnt","RtlMoveMemory",&b1_[1],&string1,nLengh1) 
    	AppelDLL32("winnt","RtlMoveMemory",&B2_[2],&string2,nLengh2)
    PS : Je n'ai pas le temps de tester...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 137
    Par défaut
    Le problème venait bien de là, merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] ActiveX - code VB vers WinDev
    Par didiflo dans le forum WinDev
    Réponses: 0
    Dernier message: 07/02/2015, 03h24
  2. [Débuter] Transcription de code C++ vers code Python
    Par Jiyuu dans le forum Qt Quick
    Réponses: 3
    Dernier message: 04/09/2013, 11h30
  3. Réponses: 2
    Dernier message: 04/06/2009, 00h13
  4. [WD11] Transformation de code VB vers Windev
    Par achestyx dans le forum WinDev
    Réponses: 1
    Dernier message: 26/05/2009, 13h24
  5. Adaptation d'un code TMemo vers TRichEdit : problème de ScrollBars
    Par Droïde Système7 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/01/2005, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo