La conversion de la Chaîne de Pointeur pour JNA
Je suis en train d'utiliser JNA pour interroger les autorisations effectives d'un fichier dans Windows. Finalement, j'ai l'intention sur l'utilisation de la GetEffectiveRightsFromAcl fonction, mais pour ce faire, j'ai besoin de fournir un pointeur vers une peuplé SYNDIC de la structure. La JNA Plate-forme (platform.jar) ne semble pas définir cette structure, donc j'essaye de le définir moi-même au lieu. Voici ce que j'ai à ce jour:
public static class TRUSTEE extends Structure {
public TRUSTEE() {
super();
}
public TRUSTEE(Pointer p) {
super(p);
read();
}
public Pointer pMultipleTrustee;
public int MultipleTrusteeOperation;
public int TrusteeForm;
public int TrusteeType;
public Pointer ptstrName;
}
Je suis en train de remplir la structure comme ceci:
private TRUSTEE createTrusteeForCurrentUser() {
TRUSTEE result = new TRUSTEE();
result.TrusteeForm = TRUSTEE_FORM.TRUSTEE_IS_NAME;
result.TrusteeType = TRUSTEE_TYPE.TRUSTEE_IS_USER;
String strName = "CURRENT_USER";
//How can I set result.ptstrName using strName?
}
Google Groupes thread recommande l'utilisation de String
champs dans les structures lorsqu'un char *
est appelé pour. Cependant, je ne pense pas que ce soit approprié à ma situation, compte tenu de la ptstrName
champ est permis à point pour les différents types de choses, en fonction de la valeur de TrusteeForm
. Donc, je pense que j'ai un peu besoin de les convertir à partir de String
à Pointer
à la place. J'ai trouvé le NativeString classe dans la JNA, qui pourrait fonctionner, sauf que c'est un colis-privé de classe.
Quelle est la méthode recommandée pour convertir un Java String
à un format natif et d'obtenir un Pointer
- t-il? Je suis même en utilisant le bon type de données pour la TRUSTEE
struct? Je suis un peu nouveau pour JNA, donc veuillez m'excuser si je suis absent quelque chose d'évident.
Mise à jour
J'ai trouvé une solution à mon problème, mais si quelqu'un a une meilleure solution que j'ai tout de même envie de l'entendre.
Vous devez vous connecter pour publier un commentaire.
En supposant que vous voulez
char *
sur le natif de côté (vous pouvez avoir besoin de plus de mémoire allouée si la chaîne contient des caractères non-ascii),Vous pouvez ensuite utiliser
m
partout où vous avez besoin de faire référence à la "native" de la chaîne.Pour les chaînes étendues (
wchar_t *
),J'ai résolu le problème en copiant le code source pour les colis-privé
NativeString
classe et en créant une copie de mon projet. J'ai dû faire une modification mineure en raison de l'utilisation d'un colis-privé de la méthode dans le constructeur.Mise à jour: Comme @fragorl notes dans les commentaires, la mise en œuvre de NativeString indiqué ci-dessous est maintenant tout à fait out-of-date.
Utilisation:
NativeString.java:
wide
paramètretrue
. Le 1-arg constructeur définitfalse
.essayez d'utiliser le Pointeur de classe dans http://jna.java.net/javadoc/com/sun/jna/Pointer.html.
Pointer
, je suppose que la question est plutôt de savoir comment convertir un JavaString
dans un format natif et d'obtenir unPointer
objet.