Forum Clubic

Une fonction DLL qui ne fé pa son job - DLL et string

voila. j’ai des fonctions DLL celle qui retourne un nombre As Integer et celle qui retourne une chaine As String que j’utilise dans un programme de GPAO.
le probleme c’est que celle qui retourne la chaine ne font k’a leur tete: elle ne retourne que le premier caractere de la chaine!

Fais voir le code d’appel VB (je suppose que c’est de ça dont il s’agit) de la fonction… J’imagine qu’il te faut allouer un tableau de caractères avant d’appeler la DLL, ou quelque chose comme ça.

C’est un problème de pointeur, à mes débuts en VB, je codais pas mal de DLL en C pour VB et j’ai donc codé ceci (dans un module) :


Private Declare Function ConvCStringToVBString Lib "kernel32" Alias "lstrcpyA" (ByVal lpsz As String, ByVal pt As Long) As Long ' Notice the As Long return value replacing the As String given by the API Viewer.

Public Function GetStringFromPointer(ByVal lpString As Long) As String
Dim NullCharPos As Long
Dim szBuffer As String

    szBuffer = String(255, 0)
    ConvCStringToVBString szBuffer, lpString
    ' Look for the null char ending the C string
    NullCharPos = InStr(szBuffer, vbNullChar)
    GetStringFromPointer = Left(szBuffer, NullCharPos - 1)
End Function

Example:


dim MyDriverName as String
' FSOUND_GetDriverName return a pointer to the string
MyDriverName = GetStringFromPointer(FSOUND_GetDriverName(count))

bonjour,
voila je ne suis pas un expert de VB. Bon j’ai compiler la premiere fonction(getstringfrompointer) et je l’ai mis dans un module. j’ai essayer de compiler le code de l’exemple que vous m’aviez donner MYDrivename mais ime dit ke

Ce n’est qu’un exemple, c’est à toi de faire un minimum d’effort pour comprendre mon aide …

oui j’apprecis ton aide mais c’est que je suis debutant sur VB.
en plus la fonction Fsoundgetdrive name je dois aussi la declarer en tant que fonction apparteant a API(parceke VB me retourne une errejur lors de la compilation)

C’est GetStringFromPointer que tu dois adapter, FSOUND_GetDriverName n’est qu’une fonction “bidon” pour te montrer comment récupérer le pointeur sur la chaine que cette fonction retourne.