Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2400 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [borland c++ buider] Utiliser une DLL.........

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[borland c++ buider] Utiliser une DLL.........

n°784654
roromaino
Posté le 02-07-2004 à 11:51:24  profilanswer
 

Bonjour,
 
voici mon probleme:
J'utilise une carte d'acquisition video avec une camera connecter dessus. J'ai la dll permettant de piloter cette carte d'acquisition. La fonction que je veux utiliser dans le dll est une fonction permettant decapturer l'image en cours sur la camera est de l'enregistrer dans un fichier .jpg
 
voici le prototype de la fonction de la dll :
INT isavi_SaveJPG (int nAviID, const char* pcFile, PIS_VIDEOHDR pvh);
Saves a picture into a file.
Parameter Type Value Description:
nAviID int Instance ID returned by isavi_InitAVI()
pcFile const char* Pointer to the filename where the picture should be
saved to. If this is NULL, a file selection dialog will be opened.
pvh PIS_VIDEOHDR Description of a compressed image to be saved. If this is NULL, an intern buffer will be created to store the captured image.
 
Error code (“IS_AVI_”;) Description
NO_ERR No error
ERR_INVALID_ID The specified instance could not be found
ERR_FILE_OPEN Error while creating the file
ERR_PARAMETER If an exception occurs
ERR_NEW_FAILED Memory allocation failed
ERR_INVALID_FILE The user did not specify a valid file

 
Cette DLL est fourni sans .h ni .lib
J'ai donc essayer d'utiliser la dll sous borland avec un programme tout simple utilisant un bouton.

Code :
  1. #include <vcl.h>
  2. #pragma hdrstop
  3. #include "main.h"
  4. //---------------------------------------------------------------------------
  5. #pragma package(smart_init)
  6. #pragma resource "*.dfm"
  7. TForm1 *Form1;
  8. typedef int (__stdcall *MYDLLFUNC)(int nAviID, const char* pcFile, PIS_VIDEOHDR pvh);
  9. //---------------------------------------------------------------------------
  10. __fastcall TForm1::TForm1(TComponent* Owner)    : TForm(Owner)
  11. {
  12. }
  13. //---------------------------------------------------------------------------
  14. void __fastcall TForm1::Button1Click(TObject *Sender)
  15. {
  16. HINSTANCE hinstDLL;
  17. MYDLLFUNC ImpFuncDLL;
  18.     if ((hinstDLL=LoadLibrary("Falcon.dll" )))
  19.     {
  20.         ImpFuncDLL = (MYDLLFUNC)GetProcAddress(hinstDLL, "isavi_SaveJPG" );
  21.         if (ImpFuncDLL)
  22.         {
  23.             //code a mettre ici
  24.         }
  25.         FreeLibrary(hinstDLL);
  26.     }
  27. }


 
Mais borland me fait une erreur sur la ligne suivante et avec le curseur placé apres PIS_VIDEOHDR :
typedef int (__stdcall *MYDLLFUNC)(int nAviID, const char* pcFile, PIS_VIDEOHDR pvh);
 
E2257 , attendue Erreur du compilateur
Une virgule était attendue dans une liste de déclarations, d'initialisations, ou de paramètres.
 
Ce problème vient en général d'un élément de syntaxe manquant en amont du fichier ou dans l'un des en-têtes inclus.

 
Il a pas l'air de connaitre le "PIS_VIDEOHDR ", mais peut-etre que j'ai des erreurs dans mon code.....
 
Quelqu'un a une idée pour que je puisse utiliser ma fonction ?
 
merci d'avance de vos reponses..........
 

mood
Publicité
Posté le 02-07-2004 à 11:51:24  profilanswer
 

n°784711
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-07-2004 à 12:20:52  profilanswer
 

à mo, avis ce qui manque c'est simplement le type PIS_VIDEOHDR


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°784751
roromaino
Posté le 02-07-2004 à 12:57:50  profilanswer
 

ok, et comment je le recupere ce type , il me faudrait au moin un fichier.h ?

n°784753
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-07-2004 à 12:59:05  profilanswer
 

bah ça j'en sais rien :D
faut savoir quel type de données la fonction attend :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°784836
roromaino
Posté le 02-07-2004 à 13:52:38  profilanswer
 

d'apres la doc j'ai çà mais rien de plus :
 
pvh PIS_VIDEOHDR : Description of a compressed image to be saved. If this is NULL, an intern buffer will be created to store the captured image.
 
PIS_VIDEOHDR est le type et pvh le nom du parametre.

n°784896
auredauv
Posté le 02-07-2004 à 14:23:22  profilanswer
 

tape videohdr dans google et tu trouveras peut-être ce que tu cherches
 
en tout cas le 1er lien renvoyé est le msdn de Microsoft et il te donne un type que j'ai recopié ci-après
typedef struct videohdr_tag {
    LPBYTE      lpData;  
    DWORD       dwBufferLength;  
    DWORD       dwBytesUsed;  
    DWORD       dwTimeCaptured;  
    DWORD       dwUser;  
    DWORD       dwFlags;  
    DWORD_PTR   dwReserved[4];  
} VIDEOHDR, NEAR *PVIDEOHDR, FAR * LPVIDEOHDR;
 
ça va peut-être t'aider

n°784918
roromaino
Posté le 02-07-2004 à 14:34:09  profilanswer
 

ha oui merci je crois que ca va carrement m'aider.........
 
je jette un oeuil de suite dessus.

n°787750
roromaino
Posté le 06-07-2004 à 10:22:36  profilanswer
 

ok c'est bon j'ai reussi a capturer une image sous borland ca marche nickel.
 
Maintenant je voudrais realisé ce meme programme sous LabWindowsCvi mais là c'est une autre paire de manche.
 
Voici mon programme tout simple qui lit la version de la dll et qui fonctionne impect sous borland voici le code sous borland :

Code :
  1. #include <windows.h> 
  2. #include <utility.h>
  3. #include <ansi_c.h>
  4. #include <cvirte.h>
  5. #include "falcon.h"
  6. int retour;
  7. typedef int (__stdcall *VERSION) ();
  8. //Programme principal
  9. int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE revInstance,LPSTR lpszCmdLine, int nCmdShow)
  10. {
  11. if (InitCVIRTE (hInstance, 0, 0) == 0)
  12.  return -1; /* out of memory */
  13.     HINSTANCE hinstDLL;
  14.     VERSION ImpFuncVERSION;
  15.     if ((hinstDLL=LoadLibrary("Falcon.dll" )))
  16.     {
  17.     ImpFuncVERSION = (VERSION)GetProcAddress(hinstDLL, "is_GetDLLVersion" );
  18.  
  19.     if (ImpFuncVERSION)
  20.     {
  21.      retour=ImpFuncVERSION();
  22.     }
  23.     //Liberer la DLL
  24.     FreeLibrary(hinstDLL);
  25.     }
  26. }


 
j'aimerais effectuer ce meme code sous LabWindowsCvi. J'ai inclus sous cvi le point h et le lib . Lorsque j'utilise le meme code de borland a cvi , cvi ne me reconnais pas "HINSTANCE" et d'autre erreur lié a la premiere...
 
une idée comment ouvrir et utilisé une dll sous cvi ?
J'ai bien trouvé un toturial mais celui-ci utilise une dll construite sous Cvi donc les procedures d'appels sont differentes.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [borland c++ buider] Utiliser une DLL.........

 

Sujets relatifs
utilitaire pour voir les fonctions exporté et utilisé par une DLL[Mambo] comment utiliser son ID sur un forum ?
Problème de linkage DLL sous DevCppcomment bien utiliser strtol ?
Comment s'identifier automatiquement sur un site et utiliser inet ?[PHP] Comment utiliser le résultat d'une requete sans recharger
Utiliser une variable dans un autre fichier[borland C++] afficher une image bitmap URGENT svp
[ASP.NET] Utiliser un Timer pour raffraichir un datagrid ?utiliser OCI avec oracle 7
Plus de sujets relatifs à : [borland c++ buider] Utiliser une DLL.........


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR