Utiliser des class c++ avec masm directx xaudio2basicsound

Soyez le premier à donner votre avis sur cette source.

Vue 3 932 fois - Téléchargée 718 fois

Description

Le source est un prototype dans le sens ou il réécrit l'exemple avec
masm en utilisant la class c++ CWaveFile.
Beaucoup pensaient la chose infaisable,voila de quoi les détromper.

------- Pour réutiliser une clas c++---:
Une classe c++ est constitué d'un .h et d'un .cpp.
      • Il faut d'abord vérifier que toutes les fonctions sont déclarées

dans le .cpp
exemple: dans sdkwavefile.h on garde la déclaration de la fonction
WAVEFORMATEX* GetFormat();
/*
WAVEFORMATEX* GetFormat()
{
return m_pwfx;
};
  • /

: dans sdkwavefile.cpp on écrit la fonction
WAVEFORMATEX* CWaveFile::GetFormat()
{
return m_pwfx;
};
          • Il faut connaitre la taille a réservé en pile pour le fonctionnement de la classe.

en c++ le code "CWaveFile wave" initialyse la classe
on desassemble le code source cl /Fa et on cherche la déclaration
de la variable wave qui nous donne sa taille.
        • au link,on ne peut utiliser que des objets .obj.

Le code fonctionne si on se lie a une librairie mais ...
Il se produit un échec a l'exit dans la crt et le programme reste en mémoire.

------- références directx --------
Samples\C++\DXUT\Optional les classes sont içi
Samples\C++\XAudio2\XAudio2BasicSound exemple réécrit en masm

------- recompiler le source ----------
Vous aurez besoin des headers sdk disponible sur mon site
les headers directx traduits sont inclus dans le zip et le directx sdk n'est peut-être
pas absolument nécessaire.
J'ai compilé le total avec ml 10 du c++ express 10 et les librairies du windows sdk 7
Modifier le chemin du .wav utilisé,un autre peut convenir (mono)
--- c'est un prototype,le code n'est pas très bien léché --
--- il manque justes quelques déclarations et une macro pour le rendre plus lisible--

Conclusion :


permet d'utiliser les class c++

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

ToutEnMasm
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1 -
l'instruction peut servir à cela:
http://www.masm32.com/board/index.php?topic=11061.0
tout y est ,code ,tests de rapidité ....
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
Sur 64 bits:

.1
dec ecx
mov eax,[esi]
mov edx,[esi+4]
lea esi,[esi+8]
mov [edi],eax
mov [edi+4],edx
lea edi,[edi+8]
jne .1

ici, il n'y a aucun stall.

Une copie de 128 bits avec une seule instruction génèrera forcement un stall sur le jmp. Avec la prédiction de branchement, je ne suis pas sur que movdqa soit plus rapide. Là encore, la perte de mémoire est de 50%.
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
Tu ne me contredis pas car tu ne parles pas de l'utilisation.

Alloue 10000 fois 1 dword et compare 10000 movdqa puis 10000 mov reg32 (sans parler de la perte de mémoire induite). Ensuite alloue 1 fois 10000 dword et là d'accord.

Je n'ai pas trouvé le nombre de cycles utilisé par l'instruction movdqa et movdqu ni la page du forum masm qui en parle donc pas évident pour calculer quoi que ce soit.
ToutEnMasm
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1 -
Desolé de te contredire , mais le gain à été verifié par des bancs d'essais (voir us masm forum) et c'est indiscutable.
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
en fait, le gain de vitesse n'est même pas certain car copier de la mémoire inutilisée n'est pas un gain de temps. Cela depends donc de l'utilisation.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.