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 :

Problème assemblages .net


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Problème assemblages .net
    Bonjour,
    S'il vous plait j'ai un petit souci avec l'utilisation d'assemblages .net
    j'utilise l'assemblage OM sage pour écrire dans la base Sage 100 (Interop.Objets100cLib.dll).
    Quand j'écris le code en Windev j'ai certaines fonctions fonctionnent sans problème comme :
    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
    pclBaseCial est un BSCIALApplication100cClass dynamique //OK
    pclAutCpta est un BSCPTAApplication100cClass dynamique//OK
    pclBaseCial = new BSCIALApplication100cClass//OK
    pclAutCpta= new BSCPTAApplication100cClass//OK
    ResRep est une chaîne = SysRep(srMesDocuments)//OK
    pclBaseCial.Name=ResRep+"\Sage\Bijou.gcm"//OK
    pclBaseCial.UserName="<Administrateur>"//OK
    pclBaseCial.UserPwd=""//OK
    pclBaseCial.Open()//OK
    pclAutCpta.Name=ResRep+"\Sage\BIJOU.MAE"//OK
    pclAutCpta.UserName="<Administrateur>"//OK
    pclAutCpta.UserPwd=""//OK
    pclAutCpta.Open()//OK
    pclCollTiers est un objet IBICollection dynamique=Null//OK
    pclOObjetTier est un objet IBOClient3 dynamique=Null//OK
    pclFac est un objet IBOClientFactory3 dynamique//OK
    pclFac=pclAutCpta:FactoryClient//OK
    Mais d'autre fonction me retourne une erreur comme celle-ci :
    pclOObjetTier = pclFac.Create()// ERREUR

    La dernière ligne m'envoie un message d'erreur:
    L'invocation de la méthode <Create()> du type <__ComObject> a échoué
    sachant que le code .net fonctionne correctement:
    ObjetClient = BaseCpta.FactoryClient.Create()
    Merci d'avance.
    Fatima

  2. #2
    Expert éminent
    Bonjour,

    Je ne connais pas du tout cet assemblage, mais, j'ai une question : As-tu essayé ceci :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    pclOObjetTier = pclAutCpta:FactoryClient.Create()
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  3. #3
    Futur Membre du Club
    Bonjour,

    Oui j'ai essayé ça et même le code de la méthode générique mais même souci

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    pclOObjetTier=pclAutCpta:FactoryClient."Create<Type>"()


    Merci bien

  4. #4
    Expert éminent
    Et en remplaçant le ":" par "." :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    pclAutCpta.FactoryClient.Create()


    Il y a une discussion (Delphi) sur le même souci ici

    Autre idée : ne pas mettre dynamique (ni = NULL) lors de la déclaration de la variable pclOObjetTier.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  5. #5
    Futur Membre du Club
    Je te remercie beaucoup frenchsting pour ton aide précieuse,

    le problème c'est que j'ai tout essayé, ça fait une semaine que je galère sur ce sujet... pour la discussion Delphi je vais t'expliquer ce qui j'ai fait mais ça n'a pas marché
    J'ai remarqué qu'il a affecté un type BaseCpta.FactoryClient.Create as IBOClient3;,
    j'ai fait pareil en Windev
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    pclOObjetTier=pclAutCpta.FactoryClient."Create<IBOClient3>"()

    mais malheureusement même erreur

    Je cherche encore...

  6. #6
    Expert éminent
    Comme tu es partie sur les "dynamique", j'ai repensé aux histoires d'allocation :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    pclOObjetTier est un objet IBOClient3 dynamique
    pclOObjetTier = allouer un IBOClient3
    pclOObjetTier = pclAutCpta:FactoryClient.Create()
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  7. #7
    Futur Membre du Club


    Ça c'est parmi les problèmes que j'ai , impossible d'instancier une classe abstraite... j'ai un grand problème d’allocation

    Par contre le Code .net est très simple et ne demande pas tout ça

  8. #8
    Membre extrêmement actif
    As-tu essayer ça
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    pclOObjetTier = allouer un pclAutCpta:FactoryClient.Create()
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  9. #9
    Futur Membre du Club


    Oui j'ai essayé ça aussi mais y'avait une erreur de syntaxe

    Par contre y'a des fonctions qui passent qui proviennent de la même classe par exemple:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    pclCollTiers est un objet IBICollection dynamique
    pclCollTiers=pclAutCpta.FactoryClient.list


    c'est juste certaines méthodes qui me renvoient ce message d'erreur

    Merci bien

  10. #10
    Expert éminent
    Bonjour

    et ceci ?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    pclOObjetTier = allouer un pclFac.Create()
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  11. #11
    Futur Membre du Club
    Bonjour frenchsting

    Une erreur de syntaxe




    Merci bien

  12. #12
    Expert éminent
    Et en mettant ":" ?

    Une question : as-tu un moyen de voir les méthodes existantes dans ton assemblage ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  13. #13
    Futur Membre du Club
    Ok je vais t'envoyer tous les éléments:

    dans une image jointe je t'ai envoyé la définition de la méthode Create()
    ************************************************************************************************************
    Le code initial .net
    *************************************************************************************************************
    Code VB.NET :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
     
    Option Strict Off
    Imports Objets100cLib
    Imports System
    Module CreationObjetClient
     
     
    Sub Main()
    Dim BaseCpta As New BSCPTAApplication100c
    ' (1)
    Dim ObjetClient As IBOClient3 = Nothing
    If OuvreBaseCpta(BaseCpta, "C:\temp\Bijou.mae") Then
    If CreeObjetClient(BaseCpta, ObjetClient) Then
    Console.WriteLine("Objet Client créé !")
    End If
    FermeBaseCpta(BaseCpta)
    End If
    End Sub
     
     
    Function CreeObjetClient(ByRef BaseCpta As BSCPTAApplication100c, ByRef ObjetClient As IBOClient3) As Boolean
    Try
    ' (2)
    ObjetClient = BaseCpta.FactoryClient.Create()
    Return True
    Catch ex As Exception
    Console.WriteLine("Erreur en création d'un nouvel objet Client : {0}", ex.Message)
    Return False
    End Try
    End Function
     
     
    Function OuvreBaseCpta(ByRef BaseCpta As BSCPTAApplication100c, _
    ByVal NomBaseCpta As String, Optional ByVal Utilisateur As String = "<Administrateur>", _
    Optional ByVal MotDePasse As String = "") As Boolean
    Try
    BaseCpta.Name = NomBaseCpta
    BaseCpta.Loggable.UserName = Utilisateur
    BaseCpta.Loggable.UserPwd = MotDePasse
    BaseCpta.Open()
    Return True
    Catch ex As Exception
    Console.WriteLine("Erreur en ouverture de base comptable : {0}", ex.Message)
    Return False
    End Try
    End Function





  14. #14
    Expert éminent
    Bonjour,
    Peut-être que la classe IBOClientFactory3 a besoin que certains membres soient affectés avant de pouvoir appeler la méthode Create().
    Est-ce que tu obtiens des infos supplémentaires si tu mets la ligne de code dans un bloc "quand exception dans.. faire.." avec un ExceptionInfo() ?

    Dernière "test", même si je me doute du résultat: si tu déclares pclOObjetTier comme étant un objet dynamique (sans préciser son type exact) ?

    Tatayo.

  15. #15
    Membre extrêmement actif
    Citation Envoyé par tatayo Voir le message

    Dernière "test", même si je me doute du résultat: si tu déclares pclOObjetTier comme étant un objet dynamique (sans préciser son type exact) ?
    Ou en variant ?
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  16. #16
    Futur Membre du Club
    J'ai testé les deux cas et même souci:



    pour la classe IBOClientFactory3 je ne crois pas que je dois affecter autres membres avant car selon la documentation
    c'est très simple

    Code .net
    Code VB.NET :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
     
    Option Strict Off
    Imports Objets100cLib
    Imports System
    Module CreationObjetClient
     
     
    Sub Main()
    Dim BaseCpta As New BSCPTAApplication100c
    ' (1)
    Dim ObjetClient As IBOClient3 = Nothing
    If OuvreBaseCpta(BaseCpta, "C:\temp\Bijou.mae") Then
    If CreeObjetClient(BaseCpta, ObjetClient) Then
    Console.WriteLine("Objet Client créé !")
    End If
    FermeBaseCpta(BaseCpta)
    End If
    End Sub
     
     
    Function CreeObjetClient(ByRef BaseCpta As BSCPTAApplication100c, ByRef ObjetClient As IBOClient3) As Boolean
    Try
    ' (2)
    ObjetClient = BaseCpta.FactoryClient.Create()
    Return True
    Catch ex As Exception
    Console.WriteLine("Erreur en création d'un nouvel objet Client : {0}", ex.Message)
    Return False
    End Try
    End Function
     
     
    Function OuvreBaseCpta(ByRef BaseCpta As BSCPTAApplication100c, _
    ByVal NomBaseCpta As String, Optional ByVal Utilisateur As String = "<Administrateur>", _
    Optional ByVal MotDePasse As String = "") As Boolean
    Try
    BaseCpta.Name = NomBaseCpta
    BaseCpta.Loggable.UserName = Utilisateur
    BaseCpta.Loggable.UserPwd = MotDePasse
    BaseCpta.Open()
    Return True
    Catch ex As Exception
    Console.WriteLine("Erreur en ouverture de base comptable : {0}", ex.Message)
    Return False
    End Try
    End Function



    Pour le cas exception je n'ai que ce message :
    L'invocation de la méthode <Create()> du type <__ComObject> a échoué

    je suis vraiment désolée et merci bien pour vos efforts

  17. #17
    Membre expérimenté
    Bonjour,
    Quand une documentation marque "c'est très simple", ou que sur un emballage il y a marqué "ouverture facile", il faut commencer à se méfier.
    Il y a peut être plus simple, mais ça tourne

  18. #18
    Futur Membre du Club
    Citation Envoyé par Voroltinquo Voir le message
    Bonjour,
    Quand une documentation marque "c'est très simple", ou que sur un emballage il y a marqué "ouverture facile", il faut commencer à se méfier.
    je commence à pleurer, c'est la première fois que je bloque de cette manière sur un sujet....

  19. #19
    Membre extrêmement actif
    Citation Envoyé par MobilityDev Voir le message
    je commence à pleurer, c'est la première fois que je bloque de cette manière sur un sujet....
    Il ne faut pas abandonner. Est-ce que tu as pu trouver des codes sources dans d'autres langages qui le font ?
    Normalement, y a toujours moyen de le faire avec Windev, il faut juste trouver la bonne formule.
    Courage.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  20. #20
    Expert éminent
    Une question : ça ne serait pas une histoire de compatibilité windows/framework .net ?

    Tu as bien la "bonne" version du framework .net ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.