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

Python Discussion :

Message erreur conversion Cython


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Message erreur conversion Cython
    Bonjour,

    Je tente d'accélérer l'exécution de mon code en le convertissant en Cython.

    Or, j'obtiens un message d'erreur dans le terminal au moment de convertir mon fichier pyx
    en l'occurence ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: unknown file type '' (from 'progprincipal')
    S'agit-il d'une difficulté liée à mes déclarations de string vide du genre x ='' ?

    Quelqu'un aurait une idée ?
    Merci à tous.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par ceststef Voir le message
    Quelqu'un aurait une idée ?
    Sans un code minimaliste reproduisant le souci, difficile à dire. Cela pourrait effectivement provenir de tes strings vides, si par exemple ton code était copié+collé depuis un tutoriel type pdf dans lequel les caractère "quote simple" ne serait pas représenté par un ' classique mais par un caractère un peu plus "habillé" mais qui n'est pas un caractère reconnu par Python...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Invité
    Invité(e)
    Par défaut Salut
    Bonsoir.

    Merci pour la réponse.

    Mon code n'est pas un copier-coller. Il s'agit de mon programme perso que je mène depuis un moment.
    Donc il n'y a pas d'erreur se rapportant à ce type de manipulation.

    En fait, le fichier que je nomme 'progprincipal' fait plus d'une ligne (20 000) alors difficile, selon moi, d'identifier d'où vient le soucis
    car le retour d'erreur ne me livre pas plus d'information que ce que je vous ai indiquée.

    Ce qui me paraissait étonnant, si cette hypothèse se révèle juste, c'est que Cython formerait une erreur se rapportant à la désignation d'un variable qui, sous python, peut valablement être faite sous la forme:

    x =""

    L'erreur vient nécessairement de l'homme donc je n'arrive pas identifier où je me plante. Il y a quelque chose qui m'échappe.

    La nuit porte conseille ... ou la communauté !

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Citation Envoyé par ceststef Voir le message
    En fait, le fichier que je nomme 'progprincipal' fait plus d'une ligne (20 000) alors difficile, selon moi, d'identifier d'où vient le soucis
    car le retour d'erreur ne me livre pas plus d'information que ce que je vous ai indiquée.
    Quand on ne sait pas d'où vient l'erreur, on peut essayer de mettre des lignes en commentaire pour voir si elle est toujours là. Et faire une sorte de recherche dichotomique pour la cerner plus précisément.
    Mais c'est pour les cas désespérés.

    De toutes façons, sans code pour reproduire, les idées sont à chercher dans les articles glanés sur le Web qui parlent de problème similaire. C'est aussi laborieux mais ça permet de mieux saisir les composants qui sont concernés et peut être donner des idées sur quoi chercher.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Avec aussi peu d'infos, il est difficile de trouver une solution.

    En cherchant sur le web avec "cython error: unknown file type ''", on trouve des sites qui parlent de l'erreur mais le plus souvent avec " type '.pyx' ". Cela suggère que l'erreur n'est pas forcément dans le code, mais peut se trouver aussi dans le processus de traitement par cython. Processus dont on ne connait rien pour l'instant: quel méthode a été utilisée? L'erreur peut aussi se trouver dans l'installation elle-même à cause d'un problème de version.

    Quant à gagner du temps d'exécution avec la compilation par cython, attention à un détail: on gagne vraiment du temps lorsque le type des variables python passées au code C ou C++, existe en C ou C++! Sinon, le code compilé devra appeler l'API Python souvent, et le gain de temps ne sera pas présent, et même pourra être moins bon qu'avec le Python pur (ça m'est déjà arrivé).

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    hello,
    peux-tu nous montrer la commande ou le script python que tu utilises pour "Cythoniser" ton fichier progprincipal ?
    exemple de commande :
    cythonize -b -i progprincipal.pyx
    exemple de script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from setuptools import setup
    from Cython.Build import cythonize
     
     
    setup(
        ext_modules=cythonize("progprincipal.pyx"),
    )
    puis lancer :
    python setup_progprincipal.py build_ext --inplace


    houla ! 20000 lignes de code dans un seul fichier : cython risque d'avoir du mal à le digérer. La vocation de cython c'est plutôt d'optimiser des bouts de code dont l'exécution est lente en python. Il aurait été plus sage de découper ton programme en plusieurs morceaux et de ne compiler en cython que les parties lentes. Est-ce qu'il y a des boucles importantes ou des calculs dans ton programme ?


    Dans ce graphique on voit que cython est intéressant surtout pour les boucles et les calculs.
    Nom : benchmark_cython1.png
Affichages : 131
Taille : 983 octets
    Benchmark pour les 4 tests, relativement au temps d'exécution par Python. De gauche à droite : print "Bonjour", lecture de gros fichier, opérations mathématiques en boucle, alignement de séquences. En bleu : Python ; en vert : compilation avec Cython seul sans typage ; en orange : avec spécification des types des variables.
    Ami calmant, J.P

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponses.

    Bien entendu, j'envisage de faire des recherches sur le web sur la foi du message d'erreur mais comme dans un premier temps, j'ai pu constater que la majorité des réponses étaient en anglais et que cela me coute, j'ai préféré soumettre ma difficulté sur le forum.

    S'agissant de mon code, il s'agit d'un programme qui se fonde sur les résultats hippiques précédents.
    A ce titre, je lui fais récupérer les résultats anciens et soumettre aux partants tout un tas de critères de sélection.

    Voilà pourquoi il contient beaucoup de boucles.


    Il me semble avoir lu justement que cython permet d'accélérer l'exécution de ces boucles.
    Bien entendu, mon essai d'amélioration vitesse porte sur un bout de code, soit sur un seul critère. Je vous en livre la fonction (avant d'en avoir la remarque, les noms trop longs de variable sont très volontaires, ce point sera remanié plus tard) :



    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
        # PROPRIÉTAIRES
        # VALEUR 20
        cpdef (dict, dict, dict, dict) etude_proprietaire_moy_quinte(self,\
            param, choixProno, dico_points_base, dico_points_discipline,\
        	dico_points_similaire, dico_points_similaire_inscrits,\
            liste_ttesId_Finalisees, liste_Id_Discipline,\
            liste_Id_Partants_Discipline, liste_Id_Similaire_Inscrits,\
            discipline, nbPartants, liste, courseId, combin_algo, dateArrInscr): 
     
            cdef list dateArrInscr, liste_proprietaires
            cdef char discipline, nomProprietaire
            cdef int proprietaire, proprietaireId, participation, succes, detenteur, chance, tuPle[0], inscrit[1], proprietaire[2], combin_algo
            cdef dict dico_proprietairesDisci
     
            liste_proprietaires =self.exeReq(("SELECT PartantNumero, ChevalId, ProprietaireId FROM PARTANT NATURAL JOIN CHEVAL WHERE CourseId ={0}").format(courseId))
     
     
            if cdef int choixProno ==1: # SUR LES COURSES PRÉCÉDENTES DE MÊME DISCIPLINE
     
                if combin_algo ==0:
                    self.changeText0('\n\n\n')
                    self.changeText0('PROPRIÉTAIRES MOYENNE:','tagSouligné') 
                    self.changeText0('  courses de {0}\n\n'.format(discipline.upper()))
     
     
                dico_proprietairesDisci ={}              	# créat° dictionnaire proprietaires            
     
                for proprietaire in liste_proprietaires:                
                    proprietaireId =proprietaire[2]
                    participation =0                  		# variable pr identifier nb particip° aux courses du propri. étudié
                    succes =0
                                             				# variable pr établir nb succès du propri. étudié
                    for tuPle in dateArrInscr:
                        for inscrit in tuPle[2]:
                            detenteur =self.exeReq("SELECT ProprietaireId \
                                                    FROM PROPRIETAIRE_HISTO \
                                                    WHERE ChevalId={0} AND ProprietaireDebut <={1} AND ProprietaireFin >={2}"\
                                                    .format(inscrit[1], tuPle[0], tuPle[0]))[0][0]
                            if proprietaireId == detenteur: 
                                participation +=1
                                if inscrit[0] in tuPle[1]: succes +=1
                    if participation ==0: chance =0
                    else:
                        if succes ==0: chance =0
                        else: chance = round(succes/participation,4)
                    nomProprietaire =self.exeReq("SELECT ProprietaireNom FROM PROPRIETAIRE WHERE ProprietaireId ={}".format(proprietaireId))[0][0]
                    dico_proprietairesDisci[proprietaire[0]] =[nomProprietaire, succes, participation, chance]     	# on retrouve un dictionnaire:
                                                                                       								# cle: n° du cheval
                                                                                       								# valeurs: [0] nom propri.
                                                                                       								#          [1] nb de succes propri.
                                                                                       								#          [2] nb de particip°
                                                                                       								#          [3] chance du propri.
     
     
     
                cdef int k
                cdef list v
                for k,v in dico_proprietairesDisci.items():
                    cdef list valproprio
                    cdef list valeur
                    valproprio =dico_proprietairesDisci[k]
                    valeur =dico_points_discipline.get(k)     # ajout du point " moyenne proprietaire " au dictionnaire " courses même discipline "
                    if valeur[1] !=0:
                        valeur[2] =round(valeur[2] + valproprio[3],4)
                        valeur[20] = round(valeur[20] + valproprio[3],4)
                    dico_points_discipline[k] =valeur
     
              .
              .
              .
     
            return dico_points_base, dico_points_discipline, dico_points_similaire, dico_points_similaire_inscrits

    Pour avoir utilisé time.perf_counter() , je sais que c'est ce type de boucles qu'il me faut tenter d'accélérer.


    S'agissant du script python que j'utilise pour cythoniser, il s'agit de celui-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    from Cython.Distutils import build_ext
     
    extensions = [
        Extension("prog_principal", ["prog_principal"])  # à renommer selon les besoins
    ]
     
    setup(
        cmdclass = {'build_ext':build_ext},
        ext_modules = cythonize(extensions),
    )

    Effectivement, 20000 lignes, cela peut paraitre beaucoup, mais d'emblée, en débutant le programme et comme c'était pour moi le premier, j'ai opté pour la poo. Mais en réalité, je ne crée qu'un seul objet au lancement de mon programme qui ne contient qu'une seule classe. Du coup, toutes les méthodes de ma classe s'alignent dans la même bout de code. Peut être que c'est lourd, inélégant, mais cela fonctionne.


    PS: le nom du programme principal est redevenu "prog_principal" qui était celui d'origine. En effectuant mon premier post, j'avais tenté de virer l'underscore, on ne sait jamais. Mais ce n'était pas le problème.

  8. #8
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    tu peux essayer ceci :
    extensions = [ Extension("prog_principal", ["prog_principal.pyx"]) # à renommer selon les besoins
    ]

  9. #9
    Invité
    Invité(e)
    Par défaut
    Oui, le .pyx c'était un oubli à force de retoucher et chercher.

    Non, ben, toujours le même message:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: unknown file type '' (from 'prog_principal')


    J'ai également tenté d'insérer dans un autre petit code qui fonctionne la déclaration en python d'une variable quelconque a =''
    et la cythonisation s'est bien déroulée.
    Je peux semble t il en conclure que ce n'est pas cela.

  10. #10
    Invité
    Invité(e)
    Par défaut
    J'obtiens cela désormais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValueError: 'prog_principal.pyx' doesn't match any files

  11. #11
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    Quelle version de python, cython ? Cython installé comment ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    J'ai pour python la version Python 3.9.0

    J'ai installé Cython sur mon iMac via le terminal et la commande

  13. #13
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    comment s'appelle ton script principal en python ? (avec l'extension)

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ceststef Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: unknown file type '' (from 'prog_principal')
    C'est quand-même dommage qu'il ne mette pas la ligne incriminée.

    Tu peux essayer de découper ton programme (20000 lignes?) en 4 programmes de 5000 lignes (nommés p1, p2, p3, p4). On s'en fout si le résultat ne donne pas des scripts Python réellement exécutables (enfin en admettant que cython ne s'en préoccupe pas lui non plus), le but est juste de repérer la portion du programme principal en erreur. Et ainsi de suite en affinant de plus en plus...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    En tout cas moi j'ai essayer ce script de setup (setupProgPrincipal.py)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    from Cython.Distutils import build_ext
     
    extensions = [
        Extension("prog_principal", ["prog_principal.pyx"])  # à renommer selon les besoins
    ]
     
    setup(
        cmdclass = {'build_ext':build_ext},
        ext_modules = cythonize(extensions),
    )
    avec cette commande :
    python setupProgPrincipal.py build_ext --inplace
    avec comme fichier prog_principal.pyx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from __future__ import print_function
    def fib(n):
        """Print the Fibonacci series up to n."""
        a, b = 0, 1
        while b < n:
            print(b, end=' ')
            a, b = b, a + b
     
        print()
    cela fonctionne j'ai un fichier .c qui est créé puis un fichier .cp39-win_amd64.pyd
    sous windows 10 python 3.9.0 Cython 0.29.24 avec comme compilateur c celui de visual studio 19
    Le message d'erreur obtenu par ceststef est louche car cela ressemble à un problème externe au script principal. Ou alors le script principal est trop important et cela engendre une erreur.

    [EDIT] bon j'ai essayé avec un fichier python sans import de plus de 20000 lignes :
    génére un fichier c de 27 Mo avec plus de 620000 lignes et pendant la compilation j'ai une erreur fatale :
    D:\Dev\PycharmProjects\pythonProject\prog_principal.c(32754) : fatal error C1002: espace du tas insuffisant pour le compilateur lors de la deuxième passe

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Tu peux essayer de découper ton programme (20000 lignes?) en 4 programmes de 5000 lignes (nommés p1, p2, p3, p4).
    C'est une super idée. Je vais essayer. En théorie, je devrais pouvoir parvenir à termes à isoler le problème.
    Je vous tiens au courant.

    @jurassic pork
    Moi aussi sur un petit bout de code, ça fonctionne mais pas sur le programme qui m'occupe.

  17. #17
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    si c'est possible il faudrait que tu isoles que le code qui a besoin d'être optimisé car même avec 5000 lignes cela va faire encore beaucoup de lignes c puis importer le module pyd dans ton programme principal

  18. #18
    Invité
    Invité(e)
    Par défaut
    Toujours cet ensemble de messages d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      File "/Users/stef/Desktop/Pronostef/setup.py", line 15, in <module>
        ext_modules = cythonize(extensions),
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 965, in cythonize
        module_list, module_metadata = create_extension_list(
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 815, in create_extension_list
        for file in nonempty(sorted(extended_iglob(filepattern)), "'%s' doesn't match any files" % filepattern):
      File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 114, in nonempty
        raise ValueError(error_msg)
    ValueError: 'prog_principal.pyx' doesn't match any files

    ok, je vais essayer d'isoler le bout de code à optimiser.

  19. #19
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    si c'est possible il faudrait que tu isoles que le code qui a besoin d'être optimisé car même avec 5000 lignes cela va faire encore beaucoup de lignes c puis importer le module pyd dans ton programme principal
    L'idée n'était pas de réduire le code à optimiser à 5000 lignes mais de tester la compilation cython sur des portions de code de plus en plus petites pour arriver à trouver la ligne qui fout le dawa. Si par exemple la compilation échoue sur p2 alors on se concentre sur p2 uniquement et on le découpe en 5 sources de 1000 lignes p21, p22, p23, p24, p25 et on les compile séparement et etc. wiztricks avait déjà émis une idée analogue en parlant de recherche dichotomique dans son premier message.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  20. #20
    Invité
    Invité(e)
    Par défaut
    Oui j'avais bien compris la démarche.

Discussions similaires

  1. Message erreur InterBase
    Par tchaman dans le forum InterBase
    Réponses: 9
    Dernier message: 01/04/2005, 15h50
  2. [g++] message erreur etrange
    Par infotron dans le forum Autres éditeurs
    Réponses: 15
    Dernier message: 19/09/2004, 23h14
  3. [FLASH MX 2004] message erreur de classe
    Par matN59 dans le forum Flash
    Réponses: 3
    Dernier message: 14/06/2004, 08h59
  4. [VB.NET] Erreur conversion de code c=>vb (opendialogfile)
    Par hirochirak dans le forum Windows Forms
    Réponses: 19
    Dernier message: 02/06/2004, 16h31
  5. [Kylix] message erreur à l'ex
    Par JlouisI dans le forum EDI
    Réponses: 5
    Dernier message: 08/03/2003, 17h47

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