Je connais le code permettant d'utiliser les plugins In et OUT de WinAMP disponible dans les posts de ce forum. Il fonctionne assez bien (suffisamment pour l'usage que j'en fais) sauf que je code dans d'autres langages (VB6 principalement) ; Aussi j'ai voulu me lancer dans l'adaptation du code existant pour en faire une DLL exploitable en VB6. Comme je suis un utilisateur occasionnel de PureBasic, je galère à comprendre comment faire. Les tentatives que j'ai faites se sont soldées par le plantage du programme hôte.
Si une âme charitable voulait bien m'aider dans cette entreprise, il aura ma reconnaissance éternelle
Envoie ton code en pm si tu ne veux pas le montrer, sinon tu peux le poster ici.
Le but est tout mettre en procédure, de créer les structures adéquates, d'avoir une compatibilité correcte des types de chaîne, d'allouer correctement la mémoire au démarrage de la DLL, et de la libérer correctement à la clôture.
Eventuellement, substituer les listes et les tableaux en zone mémoire.
Ok ben j'ai corrigé ce qui me semblait litigieux pour la compilation. Si c'est toi qui a fait ça et que tu joues le modeste, ben tu te démerdes bien!
En Assembleur, il y a un mot-clef qui s'appelle Out. Donc, tu ne peux pas l'utiliser comme nom de chaîne même s'il y a un $ derrière. J'ai remplacé les out$ par WinampOut. J'ai viré quelque $ au passage et ai rajouté quelques Protected (le Define interne au procédures). C'est plus lisible pour savoir de quoi est constituée une procédure.
J'attends tes remarques en pm. Par contre, je quitte l'ordi pour ce matin.
De mon côté, je regarde ce qui peut faire planter toutes les fonctions autre que Init_Winamp (étrange quand même ...). Je pense que les autres fonctions n'ont pas l'air au courant que Init_Winamp ait été exécuté ...
J'ai fais un petit test avec un MessageRequester dans la fonction Winamp_InName. Le résultat y est bon mais une fois le ProcedureReturn traité : plantage ! Là je ne pige pas. La fonction est pourtant bien déclarée dans VB. Le retour doit être un String etc donc là je sèche !
En changeant la déclaration de la fonction Winamp_InName de String en Long (uniquement dans VB, la fonction ne plante pas. Elle renvoie un numéro au lieu du nom attendu donc ça sert à rien mais cela soulève une interrogation : VB est-il allergique aux fonctions DLL de PureBasic envoyant un type String ?
Remets ton string dans VB et recompile ta DLL avec le support Unicode dans les options de la compilation de la DLL (sans oublier l'ASM en ligne). C'est peut-être ça tout simplement.
J'y ai pensé aussi mais dans ce cas Init_Winamp me sort qu'il est incapable de gérer les plugins passés en paramètres donc comme ça va encore moins loin qu'avant, je ne pense pas que ça fonctionnera. Ça pose plus de problème en gros.
Voici deux procédures pour tester les transferts de chaîne entre PB et VB.
Si tu pouvais compiler cela en une DLL et tester sous VB, éventuellement mettre l'option Unicode dans les options de compilation. Si tu vois une correction à faire pour que ça marche, n'hésite pas à la faire.