Plugins WinAMP (In & Out)

Programmation d'applications complexes
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Plugins WinAMP (In & Out)

Message 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 :)
.:NY152:.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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.
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Message par NY152 »

En fait j'ai pas modifié grand chose au code existant.

Je te pm le code :)
.:NY152:.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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?
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Message 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 ^^
.:NY152:.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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.
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Message 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é ...
.:NY152:.
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Message 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 ^^
.:NY152:.
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Problème avec les String ?

Message 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 ?
.:NY152:.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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.
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Message 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.
.:NY152:.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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

NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Message 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.
.:NY152:.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

Message par NY152 »

En fait ça plante avec ou sans unicode et avec les 2 exemples. Là je suis totalement largué :(
.:NY152:.
Répondre