Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WDxx] Recherche pro du C desesperement .......

15 réponses
Avatar
MMoreno
Bonjour

je me bats en vain pour essayer de traduire du C en windev

Source initial

........
char l_pTimeMask[84];
SAFEARRAY* psa;
_variant_t TempVariant;
HRESULT hr;


TempVariant.vt = VT_ARRAY | VT_UI1;
psa = SafeArrayCreateVector(VT_UI1, 0, 84);
SafeArrayLock(psa);
memset(l_pTimeMask, 0xFF, 84);
memcpy(psa->pvData, l_pTimeMask, 84);
SafeArrayUnlock(psa);
TempVariant.parray = psa;
hr = ptrRecord1->AddUserData("TMSK", TempVariant);
...............

en fait j'ai tout traduit, le programme s'execute sans plantage , mais
je n'ai pas le resultat escompte. Du coup je mets en doute la variable
que je passe a mon ActiveX.

Donc ma question est : comment dois-je typer ma variable TempVariant en
windev et la passer ?


Merci
Michel

10 réponses

1 2
Avatar
Romain PETIT
MMoreno a écrit :
Bonjour



Bonjour,

Donc ma question est : comment dois-je typer ma variable TempVariant en
windev et la passer ?



Il faut voir ailleurs dans le code (le .h ?) comment le "type"
TempVariant est défini (une struct ou union avec typedef probablement).

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
MMoreno
Aïe, j'ai plus ou moins trouve : le probleme ne vient pas du typage.
Mon probleme vient du fait que dans la chaine que je passe , j'ai des
caracteres "Null", et apparement, ce serait windev qui ne m'envoie pas
tout.
Du coup je ne sais pas comment la definir (j'ai essaye tous les types
de chaine)

En tout cas , merci de ta reponse.

Cordialement,
Michel
Avatar
Romain PETIT
MMoreno a présenté l'énoncé suivant :

Du coup je ne sais pas comment la definir (j'ai essaye tous les types
de chaine)



A mon avis, ce n'est pas une chaine, c'est une structure dont tu as
besoin.
Recherche dans le code c (c++ ?) où se trouve la définition de
_variant_t

Un truc du genre :
typedef union {
double a;
int b;
...
}_variant_t;

ou encore :
typedef struct {
double a;
int b;
...
}_variant_t;

et utilise le type structure en WD.

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
elecoest
_variant_t est une super structure type variant avec plein de membres
:). En gros tu mets dedans un résultat et ensuite si c'est une chaine
tu exploites la partie "parray".

Pour moi tu n'y arriveras pas en WinDev. Mais c'est vrai que devant ce
type de problème j'ai toujours cherché la solution de facilité en
passant par une dll plutot que de m'amuser avec des déclaration de
structures en WinDev :) Si tu as besoin d'aide pour faire ta dll tu
sais où me trouver.
Avatar
MMoreno
Merci de vos reponses Romain et Emmanuel

Mais mon probleme est bien de transferer la chaine complete

en fait je dois passer 1 chaine de 84 caracteres a l'activeX

certains d'eux peuvent avoir comme valeur caract(0) et j'ai
l'impression ke windev tronque

je suis pas tres clair , donc 1 exemple

machaine = repete(caract(1),84)

ActiveX>>Envoie(Machaine) => en sortie j'ai bien 84 fois caract(1)

si machaine = repete(caract(1),30)+caract(0)+caract(53)

ActiveX>>Envoie(Machaine) => en sortie je n'ai plus que 30 caracteres


si je fais :
ActiveX>>Envoie(complete(Machaine,84)) => en sortie je n'ai plus que
30 carac(1)+54 caract(20) (Espaces)

mon probleme donc , comment je peux envoyer ma chaine complete ?

Merci

Michel
Avatar
MMoreno
Merci de vos reponses Romain et Emmanuel

Mais mon probleme est bien de transferer la chaine complete

en fait je dois passer 1 chaine de 84 caracteres a l'activeX

certains d'eux peuvent avoir comme valeur caract(0) et j'ai
l'impression ke windev tronque

je suis pas tres clair , donc 1 exemple

machaine = repete(caract(1),84)

ActiveX>>Envoie(Machaine) => en sortie j'ai bien 84 fois caract(1)

si machaine = repete(caract(1),30)+caract(0)+complete(caract(1),53)

ActiveX>>Envoie(Machaine) => en sortie je n'ai plus que 30 caracteres


si je fais :
ActiveX>>Envoie(complete(Machaine,84)) => en sortie j'ai 30 carac(1)
et 54 caract(20) (Espaces)

mon probleme donc , comment je peux envoyer ma chaine complete ?

Merci

Michel
Avatar
Emmanuel Lecoester
> ActiveX>>Envoie(Machaine) => en sortie j'ai bien 84 fois caract(1)

si machaine = repete(caract(1),30)+caract(0)+caract(53)



c'est donc pour çà qu'ils font un memcpy plutot qu'un strcpy :)

mon probleme donc , comment je peux envoyer ma chaine complete ?



en faisant une demande d'évolution au ST pour gérer ce cas particulier de
recopie de chaine de caractères contenant le caractères ''
Avatar
Romain PETIT
MMoreno a couché sur son écran :
mon probleme donc , comment je peux envoyer ma chaine complete ?



Il me semble qu'il a maintenant un type de variable Buffer en WD (>
7.5), essaye avec ça ("Buffer fixe" à priori)

Sinon, il te suffira d'utiliser un "tableau de x entiers sans signe sur
1 octet" et de le remplir octet par octet.

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
MMoreno
Ja'i essaye aussi avec le type buffer, mais le probleme intervient
apres
Windev indique que ce type de champ ne peut pas servir pour
OleAutomation => Plantage

Avec le tableau non plus ......

Mais c'est bon , j'ai trouve 1 contournement a 2 balles, ça fait
bidouillage pourri, mais ca fonctionne.
(en fait ce que je fais , j'ecris ma chaine ds 1 fichier texte (et la
,tiens , windev tronque pas), et j'ai essaye une
ActiveX>>Envoie(fchargetexte(monfichier)) , ca marchait pas, alors j'ai
utilise 1 autre commande de l'activex , qui lit ce fichier et renvoie
le contenu sous forme de variant, et la miracle , ca marche
(ActiveX>>Envoie(ActiveX>>rawDataAsVariant("MonFichier)))
Youpi, je vais pouvoir passer le week end sans deprimer

En tout cas , 1000 merci pour m'avoir consacre de votre temps.

Michel
Avatar
marcel
salut!

On 17-Feb-2006, "MMoreno" wrote:

Ja'i essaye aussi avec le type buffer, mais le probleme intervient
apres
Windev indique que ce type de champ ne peut pas servir pour
OleAutomation => Plantage

Avec le tableau non plus ......

Mais c'est bon , j'ai trouve 1 contournement a 2 balles, ça fait
bidouillage pourri, mais ca fonctionne.
(en fait ce que je fais , j'ecris ma chaine ds 1 fichier texte (et la
,tiens , windev tronque pas), et j'ai essaye une
ActiveX>>Envoie(fchargetexte(monfichier)) , ca marchait pas, alors j'ai
utilise 1 autre commande de l'activex , qui lit ce fichier et renvoie
le contenu sous forme de variant, et la miracle , ca marche
(ActiveX>>Envoie(ActiveX>>rawDataAsVariant("MonFichier)))
Youpi, je vais pouvoir passer le week end sans deprimer

En tout cas , 1000 merci pour m'avoir consacre de votre temps.

Michel





Pourquoi,alors, ne pas mettre ta chaine dans un variant WD que tu transmets
à ton activeX ?
Ce serait quand même plus propre que ton fichier texte ...

A+



--
Marcel Berman
Membre de WindAsso (coté belge !)
1 2