J'essaie d'utiliser la fonction DsGetSiteName() de l'API Win32 en utilisant le module Win32 :: API de Perl. Selon le SDK Windows, le prototype de fonction pour DsGetSiteName est:Perl Win32 :: API et pointeurs
DWORD DsGetSiteName(LPCTSTR ComputerName, LPTSTR *SiteName)
j'ai écrit avec succès une petite fonction C++ en utilisant cette API pour obtenir une meilleure compréhension de la façon dont il fait travailler (j'apprends C++ sur mon propre , mais je m'égare).
De toute façon, d'après ma compréhension de la documentation de l'API, le deuxième paramètre est censé être un pointeur vers une variable qui reçoit un pointeur vers une chaîne. Dans mon code C++, je l'ai écrit que:
et ont réussi appelé l'API à l'aide du pointeur de la psite. Maintenant, ma question est, est-il un moyen de faire la même chose en utilisant Win32 :: API de Perl? J'ai essayé le code Perl suivant:
my $site = " " x 256;
my $computer = "devwin7";
my $DsFunc = Win32::API->new("netapi32","DWORD DsGetSiteNameA(LPCTSTR computer, LPTSTR site)");
my $DsResult = $DsFunc->Call($computer, $site);
print $site;
et le résultat de l'appel en $ DsResult est égal à zéro (ce qui signifie le succès), mais les données dans le site $ est pas ce que je veux, il semble être un mélange de caractères ASCII et non imprimables.
La variable $ site peut-elle contenir l'adresse du pointeur de la chaîne allouée? Et si oui, est-il possible d'utiliser Win32 :: API pour déréférencer cette adresse pour obtenir la chaîne?
Merci d'avance.
Merci beaucoup ikegami pour votre solution! Les fonctions pack/unpack sont ce dont j'avais particulièrement besoin. –
@Eugene C., '." \ 0 "' manquait. – ikegami