我想利用Win32的API函數DsGetSiteName()使用Perl的Win32 :: API模塊。根據Windows的SDK,函數原型爲DsGetSiteName是:Perl的Win32 :: API和指針
DWORD DsGetSiteName(LPCTSTR ComputerName, LPTSTR *SiteName)
我成功地使用這個API讓我的自己更好的理解它是如何將實際工作(我正在學習C++寫了一個小的C++函數,但我離題了)。
無論如何,從我對API文檔的理解中,第二個參數應該是一個指向變量的指針,它接收一個指向字符串的指針。在我的C++代碼中,我寫到:
並已成功使用psite指針調用API。
現在我的問題是,有沒有辦法使用Perl的Win32 :: API做同樣的事情?我試過下面的Perl代碼:
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;
和$ DsResult調用的結果是零(指成功),但在$網站上的數據是不是我想要的,它看起來是一個混合物,的ASCII和不可打印的字符。
$ site變量是否可以保存已分配字符串的指針地址?如果是這樣,是否有一種方法使用Win32 :: API解引用該地址來獲取字符串?
在此先感謝。
非常感謝你ikegami爲您的解決方案!打包/解包功能是我特別需要的。 – 2011-04-04 13:06:30
@Eugene C.,'。「\ 0」'丟失。 – ikegami 2012-01-09 22:09:11