VB6です。
NetUserGetLocalGroups API を使用して権限があるかを確認しているのですが、漢字のユーザでログインしている場合にグループ名がとれません。
漢字の場合に取得する方法はないのでしょうか?よろしくお願いします。
まずUnicodeを意識したAPI関数の呼び出し方になっているのか、を
チェックしてみては。
このように行っています。
' サーバー名を設定(空文字の場合はローカルコンピュータ)
strServerName = StrConv("", vbUnicode)
' ユーザー名
strUserName = StrConv(argUserName, vbUnicode)
' ローカルグループのリストを取得する
lngWin32apiResultCode = NetUserGetLocalGroups(strServerName, _
strUserName, _
0, _
LG_INCLUDE_INDIRECT, _
lngBufPtr, _
MAX_PREFERRED_LENGTH, _
lngEntriesRead, _
lngTotalEntries)
>まずUnicodeを意識したAPI関数の呼び出し方になっているのか
> NetUserGetLocalGroups
のDeclare宣言はどうなっていますか?
まさか、引数にString型の変数を取るようになっていませんよね?
(Unicodeを意識したAPI関数の呼び出し方とはまさにこのこと)
一、二番目の引数は ByValのLong型で宣言し、
呼び出すときは、 StrPtr関数を使い渡します。
ちなみに
> StrConv("", vbUnicode)
> StrConv(argUserName, vbUnicode)
は変換対象が、Unicode(VBで設定した文字列)である場合無意味です。
>のDeclare宣言はどうなっていますか?
>まさか、引数にString型の変数を取るようになっていませんよね?
>(Unicodeを意識したAPI関数の呼び出し方とはまさにこのこと)
>一、二番目の引数は ByValのLong型で宣言し、
>呼び出すときは、 StrPtr関数を使い渡します。
まさにこれでした。ありがとう御座いました。
> は変換対象が、Unicode(VBで設定した文字列)である場合無意味です。
これは間違っていますね。
無意味ではなく、文字列の並び(文字コードの並び?)をShift_JISだと思って、Unicodeに変換するんですかね。
ツイート | ![]() |