掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
9x系のフォルダ共有を解除するには? (ID:107997)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
# もう見てないかな…? > 多分、上下のソースにも問題があったみたいです。 『上下』のソースとは、どういう意味でしょうか? > ただ、少し9x系とNT系の書き方が少し違うみたいなので書いときます。 多くのAPIでは、9X系はANSI系のみ、NT系ではWide系とANSI系の両方のエントリが 用意されているため、通常は、ANSI系のエントリを宣言するのが一般的です。 (ANSI系を使えば、9X系とNT系の両方に対応できるため) しかし、NetShareDel APIの場合は、そのような仕組みになっておらず、 NT系では、常にWide系のエントリを使用し、9X系ではANSI系のエントリを 使用しなければいけません。 そのため、この関数では 9x系とNT系で書き方が異なってしまうのです。 > strNetName = StrConv("ABC", vbUnicode) NT系でこれでうまくいっているなら、その方が問題ですよ。(^^; もしかして、NT系でも ByVal servername As String で宣言していませんか? たまたま動いてしまう事もありますが、"ABC"はそれ自体がUnicodeですから、 さらに vbUnicode 指定で StrConv すれば、文字列の内容によっては、 元の文字列データが破壊されてしまう事がありえます。 Wide系の(つまり、Unicode文字列を扱う)APIの場合は、String型ではなく、 Byte型の配列を利用してください。この場合は文字コードの変換が 伴わないので、文字化けする心配があります。 この場合、Declare宣言では、ByVal As Stringの替わりに、 ByRef As Byte、ByRef As Any、ByVal As Long のいずれかを使います。 # なお、ByRef As Byteの場合は、(C言語でいうところの)NULLを渡す事ができないので、 # NetShareDel APIの第1引数のように、NULLを渡す必要がある時には向きません。 たとえば、ByVal As Long を利用する場合は、こんな感じです。 'NT系専用 Private Declare Function NetShareDel Lib "netapi32" _ (ByVal lpServerName As Long, _ ByVal lpNetName As Long, _ ByVal reserved As Long) As Long Private Sub Command1_Click() 'Text1に共有名が書かれている物とする Dim NetName() As Byte Dim ret As Long NetName = Text1.Text & vbNullChar '最後の vbNullCharを忘れずに! ret = NetShareDel(0&, VarPtr(NetName(0)), 0&) End Sub また、As Any を利用する場合はこんな感じです。 'NT系専用 Private Declare Function NetShareDel Lib "netapi32" _ (ByRef lpServerName As Any, _ ByRef lpNetName As Any, _ ByVal reserved As Long) As Long Private Sub Command1_Click() 'Text1に共有名が書かれている物とする Dim NetName() As Byte Dim ret As Long NetName = Text1.Text & vbNullChar '最後の vbNullCharを忘れずに! ret = NetShareDel(ByVal 0&, NetName(0), 0&) End Sub
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.