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

VB.NET Discussion :

Migration VBA vers VB.Net


Sujet :

VB.NET

  1. #1
    Membre confirmé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Points : 610
    Points
    610
    Par défaut Migration VBA vers VB.Net
    Bonjour à tous,

    Je dois réaliser une maquette d'une application contrôlant un logiciel de simulation des réseaux d'eau nommé EPANET. L'éditeur de ce logiciel met à disposition des développeurs une toolkit permettant justement de faciliter la manipulation. J'ai réussi à obtenir un exemple de code sous Excel via VBA pour m'en inspirer...

    J'essaie de remettre ce code en VB.Net et j'appelle une méthode de la dll. Pas d'erreur à la compilation mais lors de l'exécution, la méthode me retourne un code d'erreur bizarre : il devrait être compris entre 0 et 100 alors que j'obtiens des millions

    Donc alors voilà le code VB.Net pour déclarer une fonction de la dll

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function ENopen Lib "epanet2.dll" (ByVal F1 As String, ByVal F2 As String, ByVal F3 As String) As Long

    La dll epanet2.dll est copié dans le Bin\Debug du projet (impossible de l'ajouter via visual studio)

    C'est le même code sous VBA et là ça fonctionne nickel...
    Y a t il une erreur dans mon code ?

    Et pour info, lien vers le logiciel EPANET http://www.epa.gov/nrmrl/wswrd/dw/epanet.html#toolkit

    Bref, si quelqu'un a une idée je suis preneur ...

    Par avance merci !!

    @+

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par koyot3 Voir le message
    Donc alors voilà le code VB.Net pour déclarer une fonction de la dll

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function ENopen Lib "epanet2.dll" (ByVal F1 As String, ByVal F2 As String, ByVal F3 As String) As Long
    Tu es sur que c'est la déclaration VB.Net, ça ? pas la déclaration VBA ?

    La dll epanet2.dll est copié dans le Bin\Debug du projet (impossible de l'ajouter via visual studio)
    Heureusement : ce n'est pas une assembly .Net. Mais es tu sur que ce n'est pas un composant COM requérant une "registration" ?

    C'est le même code sous VBA et là ça fonctionne nickel...
    Oui, mais comme à part une vague proximité syntaxique, il n'y a aucun rapport entre VBA et VB.Net, je ne vois pas bien ce que ce fait apporte-.

    Y a t il une erreur dans mon code ?
    - Donne en hexa la vaieur que te retoourne la fonction.
    - Poste le prototype documenté (pas le temps de chercher dans la doc que tu mentionnes).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Regarde la signature originale de la fonction C :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    int ENopen( char* f1, char* f2, char* f3)

    Le type de retour est int (32bits), or tu le déclares comme Long (64bits)
    Essaie de mettre Integer à la place

  4. #4
    Membre confirmé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Points : 610
    Points
    610
    Par défaut
    Merci de ta réponse.

    1. pour le code, il s'agit bien de VB.Net
    j'ai essayé
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function ENopen Lib "epanet2.dll" (ByVal F1 As String, ByVal F2 As String, ByVal F3 As String) As Long

    j'ai trouvé une autre version sur internet
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <DllImportAttribute("epanet2.dll")> _
    Public Function ENopen(ByVal F1 As String, ByVal F2 As String, ByVal F3 As String) As Long
     End Function

    2. comment puis-je savoir si c'est un composant COM demandant une registration ?

    3. c'est vrai que le code se ressemble en syntaxe mais je ne comprend pas pourquoi mon code en VB merdouille alors que celui en VBA fonctionne normalement. On pointe vers la même dll et je respecte le même algo d'utilisation de la toolkit...

    4. la fonction ENopen sert à ouvrir un modèle hydraulique : elle prend en paramètre le fichier input et les fichiers output devant être généré
    en cas d'erreur, (modèle erroné, ...) des codes d'erreur sont retournés : la documentation fournie la liste en expliquant l'erreur... mon soucis est que moi mon code est par exemple 385725652574592 alors que je devrais avoir un nombre inférieur à 100... De plus, le code d'erreur varie : à chaque lancement, j'obtiens un code différent !!

    Voici un exemple de code fonctionnant sous Visual Basic fourni avec la toolkit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Add EPANET2.BAS as a code module to your project 
     
    Sub HydrantRating(ByVal MyNode as String, N as Long,_ 
       D() as Single, P() as Single) 
     
      Dim i as Long 
      Dim nodeindex as Long 
      Dim t as Long 
      Dim pressure as Single 
     
      'Open the EPANET toolkit and hydraulics solver 
      ENopen "example2.inp", "example2.rpt", ""
    J'ai remplacé le fichier .bas pour le module avec les déclarations par rapport à la dll (cf 1.)

    et la documentation de la toolkit est simple

    EPANET is a program that analyzes the hydraulic and water quality behavior of water distribution systems. The EPANET Programmer's Toolkit is a dynamic link library (DLL) of functions that allows developers to customize EPANET's computational engine for their own specific needs. The functions can be incorporated into 32-bit Windows applications written in C/C++, Delphi Pascal, Visual Basic, or any other language that can call functions within a Windows DLL. The Toolkit DLL file is named EPANET2.DLL and is distributed with EPANET. The Toolkit comes with several different header files, function
    definition files, and .lib files that simplify the task of interfacing it with C/C++,
    Delphi, and Visual Basic code.

    This archive contains the following files:
    TOOLKIT.CHM -- Windows Help file that describes how to use the Toolkit
    EPANET2.DLL -- the Toolkit function library
    EPANET2.H -- header file for using the Toolkit with C/C++
    EPANET2.LIB -- LIB file for using the Toolkit with Microsoft Visual C++
    EPANET2.PAS -- import unit for using the Toolkit with Delphi (Pascal)
    EPANET2.BAS -- declarations module for using the Toolkit with Visual Basic
    README.TXT -- this file
    Bref, je ne pige pas le problème du code d'erreur variable... Je vais voir sur le point que tu m'as indiqué (com et registration) au cas où j'aurais loupé un truc ...

  5. #5
    Membre confirmé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Points : 610
    Points
    610
    Par défaut
    Bon alors j'ai peut être trouvé le bug ...

    Merci tomlev pour le problème de conversion !!

    et j'ai "débloqué" la dll avec Windows (provenant d'un autre ordinateur donc sécurité Windows)..

    bref pour l'instant j'arrive à ouvrir la simulation ...

    à vous deux !!!

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

Discussions similaires

  1. VBA vers VB.net-->exe?
    Par mawkli dans le forum Access
    Réponses: 12
    Dernier message: 14/02/2013, 11h27
  2. traduire un code vba vers vb.net
    Par houssine77100 dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/11/2010, 13h15
  3. Migration ASP vers ASP.NET
    Par attarbya87 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 15/04/2009, 17h51
  4. Migration ASP vers ASP.NET
    Par vva dans le forum IIS
    Réponses: 4
    Dernier message: 09/01/2008, 10h13
  5. Migration vb6 vers vb.net 2005
    Par Billy21 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 05/03/2007, 13h52

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