Page 1 sur 6

Plugins WinAMP (In & Out)

Publié : dim. 09/août/2009 23:45
par NY152
Bonjour,

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 :)

D'avance, merci :)

Publié : lun. 10/août/2009 2:04
par Ollivier
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.

Publié : lun. 10/août/2009 2:07
par NY152
En fait j'ai pas modifié grand chose au code existant.

Je te pm le code :)

Publié : lun. 10/août/2009 2:12
par Ollivier
Ah... Et tu veux ça pour quand en fait?

- Est-ce que tu as bien coché l'assembleur en ligne dans les options de compilation PB?
- Es-tu en 32 bits?

Publié : lun. 10/août/2009 2:41
par NY152
Je suis en 32 bit et quand on coche l'assembleur en ligne (que ce soit le code de la DLL ou le code original), il retourne une erreur :

Ligne 403:Impossible d'utiliser un mot-clef assembleur pour une affectation (Assembleur en ligne active).

Pour le délai je ne suis pas très pressé. C'est le fait de pas y arriver qui est frustrant ^^

Publié : lun. 10/août/2009 3:31
par Ollivier
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.

Publié : lun. 10/août/2009 4:01
par NY152
Pas de problème ^^

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é ...

Publié : lun. 10/août/2009 4:23
par NY152
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 !

Je continue à chercher ^^

Problème avec les String ?

Publié : lun. 10/août/2009 13:23
par NY152
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 ?

Publié : lun. 10/août/2009 15:11
par Ollivier
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.

Publié : lun. 10/août/2009 15:42
par NY152
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.

Publié : lun. 10/août/2009 19:55
par Ollivier
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.

Code : Tout sélectionner

Global Message.S

ProcedureDLL Entre(MessageArg.S)
  MessageRequester("Message", MessageArg)
EndProcedure

ProcedureDLL.S Sort()
  Message = "Simple texte"
  ProcedureReturn Message
EndProcedure


Publié : lun. 10/août/2009 20:39
par NY152
J'ai testé ton code et le résultat ne m'étonne pas.

La fonction Entre fonctionne, pas de soucis

La seconde plante totalement le programme hôte.

Publié : lun. 10/août/2009 21:52
par Ollivier
Mhmh... Ben au moins, on sait où ça plante!

Et ça, ça plante? Précise-moi bien ce que ça donne AVEC et SANS le support Unicode sous PB. Car je n'ai pas l'info actuellement.

Code : Tout sélectionner

Global Message.S

ProcedureDLL Entre(MessageArg.S)
  MessageRequester("Message", MessageArg)
EndProcedure

ProcedureDLL.I Sort()
  Message = "Simple texte"
  ProcedureReturn @Message
EndProcedure

Publié : lun. 10/août/2009 22:19
par NY152
En fait ça plante avec ou sans unicode et avec les 2 exemples. Là je suis totalement largué :(