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

Utiliser une DLL......... [borland c++ buider] - C++ - Programmation

Marsh Posté le 02-07-2004 à 11:51:24    

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

Reply

Marsh Posté le 02-07-2004 à 11:51:24   

Reply

Marsh Posté le 02-07-2004 à 12:20:52    

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


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-07-2004 à 12:57:50    

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

Reply

Marsh Posté le 02-07-2004 à 12:59:05    

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
Reply

Marsh Posté le 02-07-2004 à 13:52:38    

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.

Reply

Marsh Posté le 02-07-2004 à 14:23:22    

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

Reply

Marsh Posté le 02-07-2004 à 14:34:09    

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

Reply

Marsh Posté le 06-07-2004 à 10:22:36    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed