Ah!!! Ben voilà quelque chose qui me semble plus logique.
Je rappelle le code de ma DLL :
Code : Tout sélectionner
ProcedureDLL$ LireDonneeRepertoire()
repertoire$ = "Dossier_test"
MessageRequester("Test", repertoire$)
ProcedureReturn repertoire$
EndProcedure
Celle-ci me retourne une string, c'est pour cela que je demandais quel était le type pour Prototype du code que m'avais donné Cls parce que "Prototype$" ne voulais plus fonctionner.
Par contre le code de f1roe fonctionne correctement et comme la procédure renvoie un pointeur on peut donc mettre "Prototype.i"
Donc voici mon nouveau code :
Code : Tout sélectionner
ProcedureDLL.i LireDonneeRepertoire()
repertoire$ = "Dossier_test"
*repertoire = @repertoire$
; MessageRequester uniquement pour un test.
MessageRequester("Test", PeekS(*repertoire))
ProcedureReturn *repertoire
EndProcedure
Et celui du programme :
Code : Tout sélectionner
Prototype.i LireDonneeRepertoire()
If OpenLibrary(0, "DLLtestPointeur.dll")
Global Test.LireDonneeRepertoire
Test.LireDonneeRepertoire = GetFunction(0, "LireDonneeRepertoire")
Debug PeekS(Test())
EndIf
Le Soldat Inconnu a écrit :Une variable sans type est normalement déclaré un .i
Oui, j'avais vu ça dans la doc.
Le Soldat Inconnu a écrit :pourquoi .i et pas .l
.l est équivalent à .i sur un OS 32bits
mais en 64 bits, un pointeur n'est pas un .l mais un .q
et .i est équivalent à .q en 64 bits
En gros, la variable par défaut qui permet d'être compatible 32bits et 64 bits, c'est .i (compatible du point de vue compilation, quelqu'un qui a un OS 64 bits peux compiler ton code si il utilise des .i au lieu de .l pour les pointeurs et autres trucs du genre)
En regardant dans la section : "Variables, Types et Opérateurs" j'en avais déduis ça et c'est pour cela que j'ai pris cette bonne habitude dés le début de ne jamais utiliser ".l" mais ".i".
Cela confirme donc ce que je pensais.
En tout cas merci à vous 3 pour votre aide.
A plus.