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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2016
    Messages : 26
    Points : 15
    Points
    15
    Par défaut chaîne en paramètre :Parmi les arguments spécifiés, aucun ne correspond au paramètre formel obligatoire
    Bonjour,

    Quelqu'un pourrait m'expliquer pourquoi ce code marche très bien en VB.net mais pas en c#.
    Il s'agit juste d'ouvrir un fichier .top en utilisant l'api de topsolid.
    Le fait d'être obligé de mettre un caractère d'échappement au chemin sur le "\" (car imposé par c#) pose un problème à la méthode. J'ai également essayé avec "\b"
    message d'erreur :
    Parmi les arguments spécifiés, aucun ne correspond au paramètre formel obligatoire
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Module Module1
        Dim TopApp As TopSolid.Application
        Sub Main()
             TopApp = New TopSolid.Application
             TopApp.Documents.Open("C:\V619_Projets\Pièce d'essai.top")
        End Sub
    End Module

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    namespace ConsoleApp5
    {
        class Program
        {       
            static void Main(string[] args)
            {
                TopSolid.Application TopApp = new TopSolid.Application();
                TopApp.Documents.Open("C:\\V619_Projets\\Pièce d'essai.top");
            }
        }
    }

    Merci beaucoup

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    As-tu essayés la syntaxe Verbatim :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TopApp.Documents.Open(@"C:\V619_Projets\Pièce d'essai.top");

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2016
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Hello , merci pour ta réponse.
    Oui j’ai essayé aussi et pareil !
    Est ce que ça pourrait être une histoire d’encodage de la chaîne ?

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Pourrais tu nous donner plus de détail. S'agit-il d'une erreur à la compilation, ou à l'exécution ?
    S'agit-il du message d'erreur complet ? Si c'est une exception à l'exécution, le message d'erreur complet et la trace de la pile. Si c'est à la compilation, le message complet et le numéro de ligne fautif.

    Car sinon, je suis d'accord pour dire que les deux codes devraient être équivalent. Ce qui pourrait changer, c'est la configuration d'un des projets (par exemple, l'un en 32 bits et l'autre en 64 par exemple).

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2016
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    C'est une erreur à la compilation , voici le message d'erreur complet:

    Erreur CS7036 Parmi les arguments spécifiés, aucun ne correspond au paramètre formel obligatoire 'Documents' de 'IDocuments.Open(string, string, bool, out object)'
    la ligne d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TopApp.Documents.Open("C:\\V619_Projets\\Pièce d'essai.top");
    Merci

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Est-ce que la liste des clauses using en C# correspond à la liste des clauses Import en VB.Net ?
    Car on dirait qu'il manque des surcharges ou des méthodes d'extensions.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2016
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Oui , il n'y pas de différence.
    J'ai d'autres méthodes de cette API qui marchent en Vb mais pas en c#.
    Cette API date de 2005-2009 , est ce que ça pourrait être ça ?
    Est-il possible que des composants COM fonctionnent en vb mais pas en C# ?
    Merci

  8. #8
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Citation Envoyé par fab74 Voir le message
    Cette API date de 2005-2009 , est ce que ça pourrait être ça ?
    Tu utilises la même version de l'API (voire la même dll) au moins ?

    Pourquoi est-ce-que vous passez d'un code VB à un code C# ? Mise-à-jour ? Nouveau programme ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2016
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Oui j'utilise la même version de l'API.
    En fait c'est quelque chose que j'apprends et dans la doc il n'y a que des exemples en vb.
    Mais j'ai une préférence pour le c# et préférerait développer avec cette API dans ce langage.
    Merci

  10. #10
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par fab74 Voir le message
    Est-il possible que des composants COM fonctionnent en vb mais pas en C# ?
    En théorie non. Les composants COM sont justement indépendant du langage dans lequel on les utilises (et VB.Net et C# ne sont qu'à quelques détails près, que deux facettes différentes d'un même langage de plus bas niveau)

  11. #11
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Quel est le mode en VB.Net ? Strict On ou Strict Off ?

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2016
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Le mode est Strict Off

  13. #13
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Et en le passant à On, est-ce que cela fonctionne encore en VB.Net ?

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2016
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Oui ça fonctionne aussi bien.

  15. #15
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    En toute logique tu devrais avoir lié à ton projet un assembly qui te fournit l'API TopSolid. Tu dois pouvoir l'inspecteur avec l'explorateur d'assembly pour rechercher les types concernés et regardés comment sont définis TopSolid.Application et IDocument (et quelles sont les surcharges déclarées dans IDocument.Open).

    Concernant le code VB, as-tu pu créer et compiler un projet avec l'API fourni (je veux dire qu'il ne s'agit pas de code dans un manuel mais du code effectivement exécuté) ?

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2016
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Merci encore pour vos réponses.
    Oui j'arrive à exécuter sans problème le code VB mis plus haut : je double clic sur l'exe généré par VS et j'ai bien TopSolid qui s'ouvre avec le document indiqué.
    Je ne comprends pas ce qu'il faut faire de plus en c# !

    Voici une capture d'écran de la méthode open dans l'assembly:

    Nom : 2019-10-29_08-19-54.png
Affichages : 2463
Taille : 53,9 Ko

    Merci

  17. #17
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Le compilateur se plaint de l'absence du dernier paramètre, un paramètre en out. En C#, cela désigne un paramètre de sortie.
    Ce cas est intéressant car il semblerait que VB.Net autorise de ne pas préciser cette valeur, tandis que le C# l'impose.

    Donc une simple modification devrait résoudre le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    static void Main(string[] args)
    {
       TopSolid.Application TopApp = new TopSolid.Application();
       object document;
       TopApp.Documents.Open("C:\\V619_Projets\\Pièce d'essai.top", out document);
    }
    Je n'ai jamais eu le cas jusqu'à présent de paramètres optionnels et de paramètres de sortie qui venaient après. Il est donc possible que le compilateur te demande également de devoir saisir les paramètres optionnels. Mais tu peux voir leur valeur par défaut dans ta capture d'écran

  18. #18
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Pour une obscure raison tu sembles avoir besoin d'un paramètre de sortie sur ta méthode. Tu peux essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object docs;
    TopApp.Documents.Open("C:\\V619_Projets\\Pièce d'essai.top", out docs);
    Si ça passe tu pourras tenter de simplifier comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TopApp.Documents.Open("C:\\V619_Projets\\Pièce d'essai.top", out var _);
    Mais j'avoue que je ne vois pas trop pourquoi tu aurais besoin d'une variable en référence de sortie alors que la méthode renvoie un résultat ; ni pourquoi ça passe en VB et pas en C# (peut-être une des petites différences qu'il peut exister entre les deux langages, malgré la "compilation" commune en CL).

    Edit : grillé par François

  19. #19
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Comme ça m'intriguait j'ai effectué quelques tests. En VB il est possible de déclarer une interface ainsi :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Interface IDocuments
        Function Open(Path As String, Optional Type As String = "", Optional [ReadOnly] As Boolean = False, <Out()> Optional ByRef Documents As Object = Nothing) As ITopDocument
    End Interface

    Et l'appel suivant est permis :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Foo(documents As IDocuments, path As String)
        documents.Open(path)
    End Sub

    En C# ce n'est pas possible. On ne peut pas déclarer de paramètre obligatoire après des paramètres optionnels (comme en VB) mais surtout on ne peut pas donner de valeur par défaut à un paramètre passé par référence (ref ou out). Du coup le code VB ci-dessus n'a pas d'équivalent en C# et je pense qu'effectivement, comme le dit François, il te faudra fournir tous les arguments.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TopApp.Documents.Open("C:\\V619_Projets\\Pièce d'essai.top", "", false, out _);
    Tu peux aussi te simplifier les choses avec une méthode d'extension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static class DocumentsExtensions
    {
        public static ITopDocument Open(this IDocuments documents, string path, string type = "", bool readOnly = false) => documents.Open(path, type, readOnly, out _);
    }

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2016
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Bravo , merci à vous c'était ça.
    J'ai dû effectivement mettre tous les arguments mais également les déclarer comme variable avant.
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        class Program
        {
            public static string Type { get; private set; }
            public static bool ReadOnly { get; private set; }
            static void Main(string[] args)
            {
     
                TopSolid.Application TopApp = new TopSolid.Application();
                TopApp.Documents.Open("C:\\V619_Projets\\Pièce d'essai.top", Type="",ReadOnly=false, out var _);
     
            }
        }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/04/2010, 13h54
  2. Réponses: 4
    Dernier message: 15/03/2010, 16h28
  3. Réponses: 6
    Dernier message: 27/08/2008, 13h58
  4. fonction dont les argument sont dans un dico
    Par GConstant dans le forum Général Python
    Réponses: 1
    Dernier message: 12/08/2004, 18h24
  5. Réponses: 4
    Dernier message: 09/02/2004, 16h19

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