Accueil > Forum > > > > besoin d'aide cpp & flash
besoin d'aide cpp & flash
vendredi 5 octobre 2007 à 21:22:43 |
besoin d'aide cpp & flash

ced73
|
bonjour bonjour ^^
Cela va surement paraitre ridicule, mais il y deux ou trois trucs ou je sèche.
Je cherche à charger un flash (.swf) dans une fenêtre.
Puis tout simplement de communiquer avec mon prg c++ :)
Donc j'ai basé mon travail par rapport à cette excellente source :
http://www.cppfrance.com/codes/LECTEUR-ANIMATIONS-FLASH-100-API_33091.aspx
ou le chargement du swf se fait ici :
case WM_COMMAND: if( (HWND)lParam == hOuvrir) { // Déclarer et intialiser un buffer: char tampon[MAX_PATH]; tampon[0]=0; // Déclarer une structure OPENFILENAME: OPENFILENAME ofn; // Mettre tous les membres de la structure à 0: memset( &ofn, 0, sizeof(OPENFILENAME) ); // Définir les membres: ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFilter = "Animations Macromedia Flash\0*.swf\0\0"; ofn.lpstrFile = tampon; ofn.nMaxFile = MAX_PATH; ofn.lpstrTitle = "Choisir un fichier :"; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; // Lancer la boite de dialogue pour choisir un fichier: if(!GetOpenFileName(&ofn)) break; // Lire l'en-tête du fichier pour obtenir des infos sur l'animation: if(!LireEnTete(tampon,&swi)) { // Afficher un message d'erreur quand le fichier n'est pas valide: MessageBox(hWnd,"\nLe fichier que vous avez tenté d'ouvrir n'est pas une animation Flash valide.","Lecteur d'animations Flash",0); break; } // Obtenir la version du composant ShockwaveFlash installé: long version; pIswf->FlashVersion(&version); if(swi.version>HIWORD(version)) { // Afficher un message d'erreur quand la version de l'animation est plus récente que le composant installé: MessageBox(hWnd,"\nLa version de cette animation est plus récente que celle du composant installé.","Lecteur d'animations Flash",0); break; } // Appel de la fonction qui calcule la position et les dimensions du conteneur: RECT rct; PosDim(hWnd,swi.largeur,swi.hauteur,&rct); // Positionner le conteneur: MoveWindow(hConteneur,rct.left,rct.top,rct.right,rct.bottom,1); // Initialiser la couleur de fond de l'animation: pIswf->put_BackgroundColor(swi.fond); // Convertir le chemin en UNICODE: WCHAR fichier[MAX_PATH]; MultiByteToWideChar (CP_ACP, 0, tampon, -1, fichier, MAX_PATH+1); // Charger et jouer l'animation: pIswf->put_Movie(fichier); break; }
Ici l'on peut seletionner le flash a charger.
Le truc c'est que je veut charger mon swf au lancement de la fenêtre (WM_CREATE) mais je n'y arrive pas :S
Ensuite si quelqu'un a quelques pistes pour la communication cpp / swf (du coté flash c'est fscommand() mais du côté cpp comment gère t'on ça ?)
Voilà, de bonnes question de noobs quoi (je suis une bille en api :) )
Merci d'avance.
|
|
vendredi 5 octobre 2007 à 23:17:31 |
Re : besoin d'aide cpp & flash

racpp
|
Salut, Pour adapter le code source mentionné à tes propres besoins, il suffit de bien en comprendre le fonctionnement. Pour cela, il faudra apprendre, progressivement, un peu sur la programmation des composants COM en plus des bases de l'utilisation des APIs Windows et du C/C++. Pour l'adapter à ton cas, il y'aura assez de lignes de code à déplacer pour les mettre à la fin du traitement de WM_CREATE. Il faudra aussi mettre quelques variables en global pour les rendre accessibles partout dans le code. Pour éviter la boite de dialogue du choix du fichier, tu peux mettre le chemin directement dans le tampon. Mets ceci en global: // Définir type de pointeur pour la fonction AtlAxAttachControl: typedef HRESULT (WINAPI *PAttachControl)(IUnknown*, HWND,IUnknown**); // Déclarer notre pointeur de fonction : PAttachControl AtlAxAttachControl;
Mets ce bout de code à la fin du traitement de WM_CREATE: // Créer notre conteneur: hConteneur=CreateWindow("STATIC","",WS_CHILD | WS_VISIBLE ,0,0,0,0,hWnd,0,0,0); // Initialiser la librairie COM: CoInitialize(0); // Créer une instance de l'interface IShockwaveFlash: CoCreateInstance(CLSID_ShockwaveFlash,0,CLSCTX_ALL,IID_IShockwaveFlash,(void**)&pIswf); // Attacher l'interface à notre conteneur: AtlAxAttachControl(pIswf,hConteneur,NULL); char tampon[MAX_PATH]; lstrcpy(tampon,"d:\\projets\\lecteurflash\\exemple.swf"); // Lire l'en-tête du fichier pour obtenir des infos sur l'animation: if(!LireEnTete(tampon,&swi)) { // Afficher un message d'erreur quand le fichier n'est pas valide: MessageBox(hWnd,"\nLe fichier que vous avez tenté d'ouvrir n'est pas une animation Flash valide.","Lecteur d'animations Flash",0); break; } long version; pIswf->FlashVersion(&version); if(swi.version>HIWORD(version)) { // Afficher un message d'erreur quand la version de l'animation est plus récente que le composant installé: MessageBox(hWnd,"\nLa version de cette animation est plus récente que celle du composant installé.","Lecteur d'animations Flash",0); break; } // Appel de la fonction qui calcule la position et les dimensions du conteneur: RECT rct; PosDim(hWnd,swi.largeur,swi.hauteur,&rct); // Positionner le conteneur: MoveWindow(hConteneur,rct.left,rct.top,rct.right,rct.bottom,1); // Initialiser la couleur de fond de l'animation: pIswf->put_BackgroundColor(swi.fond); // Convertir le chemin en UNICODE: WCHAR fichier[MAX_PATH]; MultiByteToWideChar (CP_ACP, 0, tampon, -1, fichier, MAX_PATH+1); // Charger et jouer l'animation: pIswf->put_Movie(fichier);
N'oublie pas de remplacer le chemin par celui de ton fichier à charger au lancement.
|
|
samedi 6 octobre 2007 à 00:40:09 |
Re : besoin d'aide cpp & flash

ced73
|
Tout d'abord merci pour ta réponse.
Le build se passe bien (vcpp express) mais juste avant l'execution :
Exception non gérée à 0x00000000 dans LecteurFlash.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
|
|
samedi 6 octobre 2007 à 01:10:33 |
Re : besoin d'aide cpp & flash

racpp
|
Ca passe sans problème chez moi (VC 2005 Express). Essaie de déboguer le code pour déterminer la ligne qui cause l'erreur.
?
|
|
samedi 6 octobre 2007 à 09:08:43 |
Re : besoin d'aide cpp & flash

ced73
|
alors :
L'execution s'arrête sur : AtlAxAttachControl(pIswf,hConteneur,NULL);
avec les erreurs executions : Exception de première chance à 0x00000000 dans LecteurFlash.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000. Exception non gérée à 0x00000000 dans LecteurFlash.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
et les errereurs de build :
*CVTRES : fatal error CVT1100: ressource dupliquée. Type : RT_RCDATA, nom : ID_DLL, langage : 0x040C *LINK : fatal error LNK1123: échec lors de la conversion en fichier COFF : fichier non valide ou endommagé
|
|
dimanche 7 octobre 2007 à 19:59:55 |
Re : besoin d'aide cpp & flash

ced73
|
toujour dans l'idée d'ouvrir un flash à l'exécution je suis tomber sur cette source :
#include <windows.h>
int WINAPI WinMain(HINSTANCE inst,HINSTANCE prev,LPSTR cmd,int show) { MSG msg={0}; void* init = GetProcAddress(LoadLibrary("atl"),"AtlAxWinInit"); _asm call init; CreateWindow("AtlAxWin", "c:\\WINDOWS\\Help\\Tours\\mmTour\\segment2.swf", WS_VISIBLE|WS_POPUP,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),0,0,0,0); while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg); };
qui permetterais aussi d'ouvrir un swf. Cela me paraissais plus simple mais évidemment ça ne marche pas (ça aurait été trop beau ). Ya pas un moyen simple de charger un flash dans le style ?
quant à la solution proposé par racpp, on est plusieurs à avoir tester sur vc++ 6, vc++ express, devcpp, codeblock et rien n'y fait.
Je met tout de même mon implémentation au cas ou j'aurais fait une erreur :
// Les includes: #include <windows.h> #include "swf.h" #include "flash.h"
// Déclarer un pointeur sur l'interface IShockwaveFlash: IShockwaveFlash *pIswf; // Déclarer le HWND de notre conteneur Activex en global: HWND hConteneur; // Définir type de pointeur pour la fonction AtlAxAttachControl: typedef HRESULT (WINAPI *PAttachControl)(IUnknown*, HWND,IUnknown**); // Déclarer notre pointeur de fonction : PAttachControl AtlAxAttachControl;
et le wm_create :
case WM_CREATE: // Créer tous les controles: hOuvrir=CreateWindow("BUTTON","Ouvrir",WS_CHILD | WS_VISIBLE,20,428,90,20,hWnd,0,0,0); hLire=CreateWindow("BUTTON","Lire",WS_CHILD | WS_VISIBLE,170,428,90,20,hWnd,0,0,0); hArret=CreateWindow("BUTTON","Arrêter",WS_CHILD | WS_VISIBLE,270,428,90,20,hWnd,0,0,0); hRembob=CreateWindow("BUTTON","Rembobiner",WS_CHILD | WS_VISIBLE,370,428,90,20,hWnd,0,0,0); hQuitter=CreateWindow("BUTTON","Quitter",WS_CHILD | WS_VISIBLE,520,428,90,20,hWnd,0,0,0); hCadre1=CreateWindow("BUTTON","",BS_GROUPBOX | WS_CHILD | WS_VISIBLE,15,415,600,37,hWnd,0,0,0); hCadre2=CreateWindow("STATIC","",SS_SUNKEN | SS_CENTER | WS_CHILD | WS_VISIBLE,0,0,632,420,hWnd,0,0,0); // Créer notre conteneur: hConteneur=CreateWindow("STATIC","",WS_CHILD | WS_VISIBLE ,0,0,0,0,hWnd,0,0,0); // Initialiser la librairie COM: CoInitialize(0); // Créer une instance de l'interface IShockwaveFlash: CoCreateInstance(CLSID_ShockwaveFlash,0,CLSCTX_ALL,IID_IShockwaveFlash,(void**)&pIswf); // Attacher l'interface à notre conteneur: AtlAxAttachControl(pIswf,hConteneur,NULL); char tampon[MAX_PATH]; lstrcpy(tampon,"c:\\exemple.swf"); // Lire l'en-tête du fichier pour obtenir des infos sur l'animation: if(!LireEnTete(tampon,&swi)) { // Afficher un message d'erreur quand le fichier n'est pas valide: MessageBox(hWnd,"\nLe fichier que vous avez tenté d'ouvrir n'est pas une animation Flash valide.","Lecteur d'animations Flash",0); break; } long version; pIswf->FlashVersion(&version); if(swi.version>HIWORD(version)) { // Afficher un message d'erreur quand la version de l'animation est plus récente que le composant installé: MessageBox(hWnd,"\nLa version de cette animation est plus récente que celle du composant installé.","Lecteur d'animations Flash",0); break; } // Appel de la fonction qui calcule la position et les dimensions du conteneur: RECT rct; PosDim(hWnd,swi.largeur,swi.hauteur,&rct); // Positionner le conteneur: MoveWindow(hConteneur,rct.left,rct.top,rct.right,rct.bottom,1); // Initialiser la couleur de fond de l'animation: pIswf->put_BackgroundColor(swi.fond); // Convertir le chemin en UNICODE: WCHAR fichier[MAX_PATH]; MultiByteToWideChar (CP_ACP, 0, tampon, -1, fichier, MAX_PATH+1); // Charger et jouer l'animation: pIswf->put_Movie(fichier); break;
|
|
samedi 13 octobre 2007 à 03:08:51 |
Re : besoin d'aide cpp & flash

racpp
|
Salut, Je veux juste rappeler que le code source que tu as mentionné a été fait avec Visual C++ 6. Il marche aussi parfaitement sous Visual C++ 2005 Express. Quant à Dev C++ ou CodeBlock, cela ne marche pas car ces outils souffrent de beaucoup de lacunes. Comme je disais plus haut, avec un minimum de connaissances sur l'utilisation des composant COM (Activex) et le langage C++, tu arriveras à adapter le code et le faire fonctionner avec Visual C++ 2005 Express. C'est juste une question de temps. Bon courage.
|
|
Cette discussion est classée dans : fichier, version, flash, animation, ofn
Répondre à ce message
Sujets en rapport avec ce message
animation 3ds en directx [ par heidi79 ]
Je cherche à lancer une animation inclue dans un fichier .x (converti à partir d'un fichier .3ds) grâce à directx.J'ai cru voir sur différents sites q
Librairie graphique [ par neo888 ]
Lut à tous,Je suis novice en prog C/C++.Voila j'utilise borland cbuilder6 (version perso) et j'ai voulu utiliser le graphique:#includeet a mon grand r
CFileDialog [ par epoc ]
J'ai un programme qui donne à l'utilisateur la possibilité d'enregistrer un fichier, via une boite de dialogue dont voici le code :CFileDialog m_SaveF
copie automatique de la version précédente [ par plaineR ]
Bonjour,Je cherche comment conserver automatiquement la version précédente de mon fichier.Exemple :un utilisateur enregistre un fichier (monfichier.tx
Lecture de données Hexa sur 4octets avec inversion dees bits de poids faible/fort [ par VTS_35 ]
bonjour,G un gros problème de lecture de données.Je bosse sur des fichiers genre images bmp et je dois en lire l'entete.voici les première variables d
[C++ / commdlg.h] Répertoire courant OPENFILENAME [ par GrosTony ]
Salut @ tous,Dans le cadre d'un projet en cours, je doit gérer des enregistrements et chargement de fichier et je n'arrive pas à changer le répertoire
Problème sauvegarde de fichier [ par sleeper41 ]
Bonjour à tous!Voila j'essaie de sauvegarder un fichier txt bloc note sans passer par fichier enregister sous ect ..., mais j'ai quelque soucies.En fa
probleme d'ouverture [ par catamenia ]
bonjours, mon but est d'ouvrir un fichier.voici mon code :void CRobot1Doc::OnFileOpen() { CString c = "C:\\RobotEriccUsers\\"; CFileDialog tes
Animation Flash sous borland c++ [ par squellettor ]
Bonjour, Je cherche un moyen d'inserer des anim fait en flash dans mon appli borland c++ pour la rendre plus jolie. Est ce que quelqu'un sait comment
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|