none
Soucis passage de pointeur vers une DLL C++ RRS feed

  • Question

  • Bonjour,

     

    J'ai un problème avec le passage de pointeur vers une DLL, compilée avec C++ Builder.

    Je dois appeller la fonction suivante :

    Declare Function Dll_Umc_Ouvrir_Symboles Lib "Dll_Umc.dll" (ByRef Nom_Fichier As String) As Boolean

    La fonction dans la DLL a été codée comme ceci :

    __declspec ( dllimport ) bool Dll_Umc_Ouvrir_Symboles( char *Nom_Fichier )


    Enfin, quand je passe le nom de fichier en paramètre, Je me retrouve avec une erreur : Un composant externe a levé une exception...

    Voila mon code en VB :

    Private Sub OuvrirUnFichierDeSymboleToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OuvrirUnFichierDeSymboleToolStripMenuItem.Click
            Dim Fichier As String
    
            If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                Try
                    Fichier = IO.Path.GetFileName(OpenFileDialog1.FileName())
                    If (Fichier <> "") Then
                        TextBox3.Text = Fonctions.Dll_Umc_Ouvrir_Symboles(Fichier)
                    End If
    
                Catch Ex As Exception
                    MessageBox.Show("Cannot read file from disk. Original error: " & Ex.Message)
    
                Finally
                End Try
            End If
        End Sub

    Merci

    vendredi 6 janvier 2012 10:13

Réponses

  • Apres avoir regardé la source de la DLL, j'en conclu que le nom du fichier et son extension suffisent, du moment qu'il est avec l'exe. Mais j'ai testé une autre fonction, plus simple, sans pointeur, juste un Integer, il me fait la même erreur, ca doit donc venir de ma DLL qui est mauvaise. Je vous tiens au courant une fois que je suis fixé.

    Merci.


    Edit : J'ai trouvé la cause de mon problème, la DLL n'est pas totalement en cause, en fait, toutes les fonctions codées dans ma DLL reposent sur une seule, si celle la n'accorde pas l'accès toute la DLL est bloquée.

    Sauf que cette dite fonction a mal été codée et ne reconnais pas les bonnes chaines qu'on lui envoi. Je vais donc pouvoir continuer maintenant.

    Encore merci à vous.

    • Modifié TonioX vendredi 6 janvier 2012 13:13
    • Marqué comme réponse Ciprian Duduiala mercredi 11 janvier 2012 11:39
    vendredi 6 janvier 2012 12:34

Toutes les réponses

  • Bonjour,

    Pourquoi passes tu le nom de fichier en paramètre en "ByRef" ?

    Declare Function Dll_Umc_Ouvrir_Symboles Lib "Dll_Umc.dll" (ByRef Nom_Fichier As String) As Boolean
    

    vendredi 6 janvier 2012 10:27
  • Etant plutôt habitué à travailler en C et débutant en VB, je testes plusieurs possibilité, mais que je passe le nom de fichier en ByRef ou ByVal je me retrouve avec la même exception malheureusement :/

     

    Etrangement, j'ai une autre fonction qui prends la mème chose en paramètre, celle la fonctionne bien...

    • Modifié TonioX vendredi 6 janvier 2012 10:32
    vendredi 6 janvier 2012 10:30
  • Bonjour,

    Cela donne quoi avec un stringBuilder ? (http://stackoverflow.com/questions/162897/marshal-char-in-c-sharp)

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 6 janvier 2012 10:52
    Modérateur
  • Je ne vois pas d'erreur dans ton code.

    La fonction (Dll_Umc_Ouvrir_Symboles)  est bien présente dans la dll ? Elle fonctionne bien ?

    vendredi 6 janvier 2012 10:53
  • Oui elle est bien présente, en l'explorant avec dependancy walker il la voit bien, et la DLL est utilisé sur d'autres programmes réalisés et en déja production dans ma boite. Mais ce sont des programmes codés en C++ sous borland.

    Je trouve ca plutot bizarre, j'ai retourné la question et essayé plusieurs moyens avec des IntPtr et autres choses tordues, j'ai toujours la même erreur

    vendredi 6 janvier 2012 12:16
  • Si tu as toujours la même erreur, c'est peut être la fonction qui plante à cause du format du paramètre... Le nom de fichier doit il être complet ? simple ? avec extension ?

    Ou encore à cause du contenu du fichier ?

    vendredi 6 janvier 2012 12:22
  • Apres avoir regardé la source de la DLL, j'en conclu que le nom du fichier et son extension suffisent, du moment qu'il est avec l'exe. Mais j'ai testé une autre fonction, plus simple, sans pointeur, juste un Integer, il me fait la même erreur, ca doit donc venir de ma DLL qui est mauvaise. Je vous tiens au courant une fois que je suis fixé.

    Merci.


    Edit : J'ai trouvé la cause de mon problème, la DLL n'est pas totalement en cause, en fait, toutes les fonctions codées dans ma DLL reposent sur une seule, si celle la n'accorde pas l'accès toute la DLL est bloquée.

    Sauf que cette dite fonction a mal été codée et ne reconnais pas les bonnes chaines qu'on lui envoi. Je vais donc pouvoir continuer maintenant.

    Encore merci à vous.

    • Modifié TonioX vendredi 6 janvier 2012 13:13
    • Marqué comme réponse Ciprian Duduiala mercredi 11 janvier 2012 11:39
    vendredi 6 janvier 2012 12:34
  • Bonjour,

     

    Merci pour avoir partagé avec nous la suite de vos démarches.

      

    Bonne journée,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    mercredi 11 janvier 2012 11:39