beberlemarin
Messages postés5Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention25 juillet 2008
-
10 juil. 2008 à 12:23
beberlemarin
Messages postés5Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention25 juillet 2008
-
25 juil. 2008 à 10:29
Bonjour,
J'utilise les fonctions d'une dll écrit en C++ pour faire de l'acquisition vidéo
j'ai réussi à passer du C au delphi mais un problème subsiste lors de l'appelle d'une fonction
cette fonction sert à ajouter un texte sur la vidéo en cours de visualisation
en C++ le fonction est :
MID2250_API int SN_SetOverlayText( int idx, const POINT *pPos, const overlay_text_t *pOvlText, BOOL bEnable, BOOL bUpdate, int board);
que j'ai traduit en delphi :
function SN_SetOverlayText(idx :longint;position : tab2int;OvlText : overlay_text_t;bEnable : boolean;bUpdate : boolean;board :longint): longint; cdecl; external NomDLL;
AVEC
type
tab2int = array[1..2] of integer;
overlay_text_t = RECORD
text : array[0..95] of char;
fontidx: integer;
reserved : array[0..27] of char;
END;
Ma procedurequi appelle la fonction est :
procedure TForm1.SetOverlayTextClick(Sender: TObject);
var
position : tab2int;
ovltext : overlay_text_t;
begin
position[1]:=10;
position[2]:=15;
ovltext.text := 'montextesurlavideo';//cause du problème
ovltext.fontidx := 2;
ovltext.reserved :='reserved';
SN_SetOverlayText(1, position, ovltext, TRUE, true, 0);
end;
le message d'erreur est :
le projet a provoqué une classe d'exception EAccessViolation avec le message "violation access à l'adresse ... dans le module ..."
c'est après plusieurs test que je me suis rendu compte de la source du probblème : ovltext.tex
si je mets dans ovltext.text 'montextesurlavideo'#0 ma fonction renvoi un chiffre (-8) disant que ca n'a pas marché
si je mets dans ovltext.text #0 ma fonction renvoi un chiffre (0) disant que ca à marché
mais #0 n'affiche rien c'est un caractère de fin de ligne en C++
j'ai essayé de mettre une variable de type array[0..95] of char dans ovltext.text
mais il me disait type incompatible sans préciser pourquoi
voilà pourquoi je suis la car ceux sont deux variables du même type mais incompatibles !!
Merci d'avance pour vos réponses
A voir également:
Utilisation fonction DLL C++ dans Delphi ,Prob : types incompatibles
comme ca j'écris un texte dans un edit (SetOverlayTextEdit) et je l'affiche sur la vidéo (SN_SetOverlayText)
avec un timer on peu afficher la date et l'heure toutes les deux secondes par exemple
procedure TForm1.ClearOverlayClick(Sender: TObject);
var
r :integer;
begin
r:=SN_ClearOverlay(0);
ClearOverlayEdit.Text := inttostr(r);
end;
la variable r affichée dans les edits sert à vérifier le bon fonctionnement des fonctions
elles retournent 0 si tout s'est bien passé
Néanmoins la solution de fOxi doit etre meilleur pour la gestion des erreurs
encore MERCI
Vous n’avez pas trouvé la réponse que vous recherchez ?
beberlemarin
Messages postés5Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention25 juillet 2008 11 juil. 2008 à 12:03
j'arrive donc à afficher un texte sur ma vidéo en overlay mais je ne peux pas modifié dynamiquement mon texte :
Cela ne marche pas
procedure TForm1.SetOverlayTextClick(Sender: TObject);
var
Rest : integer;
OvlText: TOverlayTextT;
Pos : TPoint;
r :integer;
TexteAffiche : array[0..MAX_OVLTEXT-1] of char; begin
Pos.X:= 10;
Pos.Y:=15;
TexteAffiche:=' Montexteaffiché';
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 11 juil. 2008 à 13:38
oui c'est le probleme des array of char.
tu peu essayer ceci :
OvlText.text := copy(EditX.Text, 1, MAX_OVLTEXT);
ou encore si ça ne marche pas
var
S : string;
begin
S := EditX.Text; // le maxlength du TEdit doit etre reglé a MAX_OVLTEXT
FillChar(OvlText.text, MAX_OVLTEXT, #0);
Move(OvlText.text, S[1], Length(S));
{ ... }
end;
beberlemarin
Messages postés5Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention25 juillet 2008 11 juil. 2008 à 17:13
Merci pour ces infos et bon week end
j'ai essayé les deux premières méthodes mais il me renvoit -1 on failure
je vais tester ca plus profondement mardi
en tout cas merci pour ton aide