.NETでWNetAddConnection2について

解決


でった  2004-06-30 01:49:17  No: 84289

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


魔界の仮面弁士  2004-06-30 02:54:51  No: 84290

とりあえず、気になった所だけ。

《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」に修正してください。


でった  2004-06-30 04:15:06  No: 84291

魔界の仮面弁士様のとおり修正した所、無事戻り値0にて
正常終了しました。大変感謝しております。
VB.NETでの整数型に関する変更はすっかり忘れていて、
私がボケていました^^;
所々でどうしても以前のVBでの宣言を無意識の内にしてい
るようで、まだまだ勉強不足でした。

魔界の仮面弁士様的確なご指摘ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加