Dll conversion

missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007 - 21 nov. 2006 à 10:52
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 22 nov. 2006 à 13:20
Bonjour,

je cherche à utiliser une dll, qui contient une fonction prenant en paramètre un pointeur vers une structure

Cette structure contient beaucoup de champ, des short, des bool,mais aussi

short chan[8]

short chan2[8]

HWND hwnd

HINSTANCE host

float* chdat[8]


Et à vrai dire j'ai beaucou p de mal à les traduire.

J'ai essayé plein de chose mais rien ne semble fonctionner.

Merci, pour toute aide.....


Céline

25 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
21 nov. 2006 à 11:02
Hello,
Tu peux éventuellement jeter un oeil sur ce topic.

<hr size="2" />-Blog-
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 11:29
OK merci pour l'info, je regarde
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 nov. 2006 à 12:12
Salut,

Merci pour le lien Bidou . MissCeline, peux tu donner le prototype exact de la méthode et de la structure en C stp.
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 12:23
Pas de problème,

La structure OOI_Param est là

Datatype Name Use

short ssize

short dev Reserved,

short cmd

short msg

short res

short fdc

short average

short cur_sampl C

short chan_ena[8]

short chan_stat[8]

BOOL changed

BOOL ovrr_ok

BOOL cont

BOOL flash_

BOOL scan_dark

BOOL correct_dark

HWND hWnd (Specifies the handle of the window that is to receive messages

from the driver.)

HINSTANCE host (Specifies the application instance of the program calling the

driver.)

float* chdat[8]


Et la fonction que je veux appeler est


WORD OOI_Register(OOI_PARAM* ooip)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
21 nov. 2006 à 14:14
salut,

pour les type [8] : [MarshalAs(UnmanagedType.LPArray,
SizeConst=taille)>
type[] param;

HWND => int
HINSTANCE => int

float* => uint et utilisation de l'objet marshal allochglobal, writesingle (ou writefloat, je ne sais plus exactement le nom) et freehglobal...

ShareVB
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 14:29
Merci ShareVB

Moi, j'avais vu HINSTANCE ET HWND que le type était Intptr, je sais pas si ca change qqc.

Je vais regarder allochglobal, si je trouve des infos.

Sinon, as-tu une idée de ce qu'il faut affecter aux champs HWND et HINSTANCE?

Parce que j'ai des erreurs qui reviennent du driver de type "no windows or instance"

Merci
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 14:51
J'obtiens des erreurs de combinaison avec UnmanagedType.LPARrray, je l'ai remplacer par ByValArray, ca passe mieux.

Mais pour allochglobal, je ne trouve pas grand chose d'explicite, si tu as une idée de traduction de mon float* chdat[8]......

Merci
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
21 nov. 2006 à 15:00
salut,

en fait, pour le HINSTANCE et HWND ca dépend avec quoi tu les récupères : Intptr.toInt32 = int...avec le api c'est plutot int et avec les méthodes du framework intptr...en fait c'est surtout une convention .Net...

j'ai un tuto sur le marshaling, mais en VB.net...mais en gros ca change juste la syntaxe : http://www.sharevb.net/Les-API-en-VB-Net.html...j'en ai une version pour c# mais elle est pas sur le net pour le moment...

ShareVB
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 nov. 2006 à 15:04
Pour les tableaux de short c'est bien sûr ByValArray, pour HWND et HINSTANCE c'est mieux d'utiliser des IntPtr que des int, les IntPtr font 32 ou 64 bits selon la platforme. Pour le tableau de pointeur float là j'ai un doute, et rien pour tester pour le moment. Ca doit être plus simple de le laisser en tableau de pointeur et de faire un prototype unsafe.
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
21 nov. 2006 à 15:17
salut,

pour float * chdat[8] = > byvalarray sizeconst 8 de intptr

puis en gros :
using system.runtime.interopservices;

//allocation mémoire
for (int i = 0; i < 8;i++)
   ta_struct.chdat[i] = marshal.allochglobal(sizeof(float));

//remplissage avant appel
for (int i = 0; i < 8;i++)

   marshal.writesingle(ta_struct.chdat[i],la_valeur);

//appel

//lecture après appel
for (int i = 0; i < 8;i++)


   la_valeur = marshal.readsingle(ta_struct.chdat[i]);

//libération mémoire
for (int i = 0; i < 8;i++)

   marshal.freehglobal(ta_struct.chdat[i]);

ShareVB
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 15:40
En C# apparememnt, je n'ai pas WriteSingle, j'ai writeByte,
writeInt16, writeInt32, writeIntptr mais c'est tout pas de single.....
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 15:48
Une idée pour les champ HINSTANCE et HWND de ma structure???

Quelle valeur mettre.......

je sèche là encore
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 nov. 2006 à 16:12
Ca faut voir avec la doc de ta fonction.. depuis C# tu récupères le handle ( HWND ) de la fenêtre avec la propriété Form.Handle et le Handle de l'application avec Marshal.GetHINSTANCE( typeof( MyClass ).Module ).
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
21 nov. 2006 à 16:36
salut,

pour le float* : euh, autant pour moi, en fait, c'est avec float)Marshal.PtrToStructure(ptr,typeof(float));....ou alors avec les contextes unsafe (des pointeurs)...

et pour hinstance et hwnd = intptr...ca sera surement plus simple...

ShareVB
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 16:44
je sais bien mais dans ma doc il est écrit:

HWND the handle of the window that is to receive messages from the driver

HINSTANCE the application instance of the program calling
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 16:46
Pardon, j'ai envoyé mais je n'avais pas fini

HINSTANCe, c'est the application instance of the program calling the driver.

Donc j'ai tout essayé mais ca coince.....

Une idée........
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 nov. 2006 à 17:01
C'est ce que je viens de te donner, Form.Handle ( HWND ) et Marshal.GetHINSTANCE ( HINSTANCE ).
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 17:13
OK mais alors ca ne vient pas de là j'ai toujours la meme erreur lors de mon appel

"No window or Instance", je ne vois pas d'ou cela peut venir......
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 nov. 2006 à 18:10
Le handle de la fenêtre est il crée au moment ou tu le passes à la fonction ?
0
missceline33 Messages postés 42 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 8 février 2007
21 nov. 2006 à 18:23
encore une question comment traduiriez-vous un tableau à double entrée

float[4][2048]????

Merci
0
Rejoignez-nous