03-16-2012 04:20 AM
Bonjour à tous,
je développe actuellement une application sous LabVIEW 7.1 qui doit s'interfacer avec un LDAP en Active Directory.
Je recontre un problème avec le type Integer8 (64 bits) de Mircosoft qui est utilisé notamment pour le codage de certaines propriétés du LDAP (accountExpires,lastLogon...).
Le problème intervient au moment de la lecture des propriétés codées en Integer8: pour transformer mes données .Net en Variant j'utilise le VI
.NetObjectToVariant mais celui-ci me renvoit dans le cadre d'un Integer8 un refnum.
Par exemple j'obtiens:
.NET Refnum OMId Class Size: 98, Assembly Name: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Class Name: System.__ComObject
0x1A200006
Comment doit-on procéder pour accéder à valeur de la propriété?
Merci d'avance pour votre aide.
03-21-2012 03:38 AM
Bonjour UserFlo,
utilise la fonciton de conversion de variant en donnée:
Cordialement,
Romain DUVAL || RF & Semiconductor Staff System Engineer || CLA || CTA
National Instruments France
03-21-2012 07:15 AM
Bonjour Romain,
Merci pour ton aide.
Suite à une erreur de manipulation de ma part je n'avais pas posté dans le bon forum, voir plutôt ici:
Toutefois concernant ta solution, j'avais essayé de transformer le variant comme dans ton exemple. Cependant en sortie du VI .NetObject To Variant j'obtiens un refnum que je ne sais pas interpréter ni transformer.
Le type Integer8 auquel j'essaie d'accéder est codé sur 64 bits et ne correspond donc pas à un I8 mais à un I64. Codage I64 qui n'existe pas sous LV 7.1
Cordialement
03-21-2012 08:15 AM - edited 03-21-2012 08:16 AM
Bonjour Userflo,
Pour le I64 il faut utiliser un double precision. Normalement c'est disponible dans 7.1.
J'ai lu le forum en lien. avez tu pu tester la solution donnée par Helmut? (http://digital.ni.com/public.nsf/allkb/560CB7946920595C86256FF8004C7AA3)?
Je ne pense pas que 7.1 dispose de cette fonction (et de toute manière je ne pense pas que cela fonctionnera) mais as tu essayé de la sorte:
la fonciton delete data value est présente dans la palette application control>> Memory control.
Sinon une autre solution serait de créer ta propre fonction .net (un wrapper) capable d'interpréter ta référence et de retourner la valeur.
Pourrais tu éventuellement me fournir un code simple d'exemple pour que j'essais de résoudre le pb de mon côté?
Cordialement,
Romain DUVAL || RF & Semiconductor Staff System Engineer || CLA || CTA
National Instruments France
03-21-2012 08:40 AM
Bonjour Romain,
Effectivement LV 7.1 ne dispose pas de cette fonction.
Pour un snippet simple ça va être difficilement exploitable à mon avis car je m'interface avec un LDAP.
La solution du wrapper me semble du coup de moins en moins évitable.
Aurais-tu des documents, voir mieux des exemples sur le sujet?
J'avais trouvé le lien ci dessous mais c'est assez succint:
http://digital.ni.com/public.nsf/allkb/560CB7946920595C86256FF8004C7AA3
Cordialement
03-21-2012 09:18 AM
Je t'avoue ne pas avoir trouvé de tutorial probant. je ne l'ai d'ailleurs jamais réalisé moi-même car jusqu'à présent toutes les assembly que j'utilisais disposait d'une méthode d'accès au donnée de classe. D'ailleurs es tu sûr qu'une classe parente ne dispose pas d'une méthode d'accès?
En faisant le parallèle avec l'implémentation qu'on réalise quand on fait de l'orienté Objet sous labVIEW, il te faudra ouvrir le code source de ton assembly dans Visual Studio et créer une nouvelle méthode d'accès. je suppose qu'il doit y avoir des templates pour cela comme c'est le cas sous LabVIEW:
http://zone.ni.com/reference/en-XX/help/371361D-01/lvconcepts/creating_classes/
Cordialement,
Romain DUVAL || RF & Semiconductor Staff System Engineer || CLA || CTA
National Instruments France