VB.NETにてXPproから2000proの共有にネットワークドライブを
割り当てようとしましたが、何度実行してもエラー487が戻り値で
うまく動作しません。(ワークグループ環境です)
OS上からはドライブ割り当てが問題なくできています。
MSDNで調べたところ487は
Attempt to access invalid address. ERROR_INVALID_ADDRESS
なので、宛先が不正なようで何故こうなってしまうのか解らず
行き詰っています。
どこに問題があるのか解る方どうかご教示ください。
Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (ByVal lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
Public Structure NETRESOURCE
Public dwScope As Long
Public dwType As Long
Public dwDisplayType As Long
Public dwUsage As Long
Public lpLocalName As String
Public lpRemoteName As String
Public lpComment As String
Public lpProvider As String
End Structure
Private Const RESOURCE_CONNECTED = &H1
Private Const RESOURCETYPE_ANY = &H0
Private Const RESOURCEDISPLAYTYPE_SHARE = &H3
Private Const CONNECT_UPDATE_PROFILE = &H1
Public Function ConnectSrv(ByVal pstrRemoteName As String, _
ByVal pstrUID As String, ByVal pstrPWD As String) As Long
Dim typNetResource As NETRESOURCE
Dim lngRet As Long
With typNetResource
.dwScope = RESOURCE_CONNECTED
.dwType = RESOURCETYPE_ANY
.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
.lpLocalName = "Z:" '空いている自ドライブ
.lpRemoteName = pstrRemoteName
End With
Console.WriteLine(typNetResource.lpLocalName)
Console.WriteLine(typNetResource.lpRemoteName)
lngRet = WNetAddConnection2(typNetResource, pstrPWD, pstrUID, CONNECT_UPDATE_PROFILE)
If lngRet = 0 Then
MsgBox("接続できました。")
Else
MsgBox("接続できませんでした。")
End If
End Function
とりあえず、気になった所だけ。
《Declare宣言》
第1引数:「ByVal」→「ByRef」 (第一引数は、LPNETRESOURCE です)
第3引数:「Long」→「Integer」( DWORD は Int32型 に相当します)
戻り値:「Long」→「Integer」
《定数宣言》
型を明示するようにしましょう。(Option Strict On 時にエラーになります)
例えば、Const RESOURCE_CONNECTED = &H1 ではなく、
Const RESOURCE_CONNECTED As Integer = &H1 のようにします。
《構造体宣言》
Declare同様、「Long」→「Integer」に修正してください。
魔界の仮面弁士様のとおり修正した所、無事戻り値0にて
正常終了しました。大変感謝しております。
VB.NETでの整数型に関する変更はすっかり忘れていて、
私がボケていました^^;
所々でどうしても以前のVBでの宣言を無意識の内にしてい
るようで、まだまだ勉強不足でした。
魔界の仮面弁士様的確なご指摘ありがとうございました。
ツイート | ![]() |