RasEnumEntriesにてダイヤルアップリストを取得するには?


さおり  2002-03-27 01:01:43  No: 75411

RasApi32.dllを使ってダイヤルアップリストを取得しようとしているのですが、RasEnumEntries
にてリターンが632となり取得できません。  以下がソースです。どなたかご存知の方いたらご教
授ください。

----------------------  以下、ソース  ------------------------

    Dim typeREN()   As RASENTRYNAME         ' RASENTRYNAME構造体
    Dim lngEntry    As Long                 ' エントリ数
    Dim lngBuffer   As Long                 ' バッファサイズ
    Dim lngRet      As Long                 ' API戻り値
    Dim i           As Long                 ' ループカウンタ
    Dim strRow      As String               ' リストボックス設定文字列
    Dim typeOSINFO  As OSVERSIONINFO        ' OSVERSIONINFO構造体

    ' エントリ数の取得
    lngRet = RasEnumEntries(vbNullString, vbNullString, typeREN(i) _
                          , lngBuffer, lngEntry)

    If lngEntry > 0 Then
        ' RASENTRYNAME構造体配列を確保
        ReDim typeREN(lngEntry - 1)
        ' RASENTRYNAME構造体を初期化
        For i = 0 To lngEntry - 1
            typeREN(i).dwSize = lngBuffer / lngEntry
        Next i
        ' リストの取得
        lngRet = RasEnumEntries(vbNullString, vbNullString _
                               , typeREN(0), lngBuffer, lngEntry)
        If 0 = lngRet Then
            ' RASリストの表示
            For i = 0 To lngEntry - 1
                If 0 = i Then
                    strRow = StrConv(typeREN(i).szEntryName, vbUnicode)
                Else
                    strRow = strRow & ";"  _
                           & StrConv(typeREN(i).szEntryName, vbUnicode)
                End If
            Next i
            lstDialup.RowSource = strRow
        Else
            MsgBox "ダイヤルアップ接続リストの取得に失敗しました。" _
                    , vbExclamation, plmsg_Title
        End If
    Else
        MsgBox "ダイヤルアップ接続リストがありません。" _
                         , vbExclamation, plmsg_Title
    End If


さおり  2002-03-27 01:04:43  No: 75412

ソースが違っていました。

エントリ数の取得部分は、以下の間違いです。

    ' エントリ数の取得
    lngRet = RasEnumEntries(vbNullString, vbNullString, 0, lngBuffer, lngEntry)


マザー  2002-03-27 02:46:58  No: 75413

どちらでエラーがでてるのか解りませんが
どうやらOSのVersionにより使用方法が違う様です
気になる事があるので
RASENTRYNAMEの構造体の定義を記述してもらえませんか?


マザー  2002-03-27 02:56:50  No: 75414

今気付いたのですが
OSVERSIONINFO の構造体定義が存在しているので
Version判定は何処かに存在してるのでしょうか?
もしかしたら的外れかも知れませんが

Cの方はVersionにより
ディレクティブ以下が存在する為です。
typedef struct _RASENTRYNAME { 
  DWORD  dwSize; 
  TCHAR  szEntryName[RAS_MaxEntryName + 1]; 
#if (WINVER >= 0x500)
  DWORD dwFlags;
  CHAR  szPhonebookPath[MAX_PATH + 1];
#endif
} RASENTRYNAME;


さおり  2002-03-27 02:57:18  No: 75415

RASENTRYNAME構造体は、以下のとおりです。
ただ、エントリ数の取得では、構造体を渡していませんけど、それですかね。
Win95では、上記ソース構造体ではなく0を渡して正常に取得できています。
WinNT、Win2000では、やはり  632(ERROR_INVALID_SIZE)が返ってきます。

'■定数宣言■
Public Const RAS_MaxEntryName = 20    ' エントリの長さ

'■構造体宣言■
Type RASENTRYNAME
    dwSize As Long                            ' この構造体のサイズ
    szEntryName(RAS_MaxEntryName) As Byte    ' エントリ名
End Type


マザー  2002-03-27 03:00:54  No: 75416

構造体内のパラメータ数が二つしかないですね?
少々お待ちを


マザー  2002-03-27 03:09:39  No: 75417

Public Const RAS_MaxEntryName = 20 ' エントリの長さ
↑のサイズを256に変更すれば自端末ではできましたけど?
試してみてください
ちなみにエントリ数の取得時の第三引数には
仮想の構造体RASENTRYNAMEを渡しました


さおり  2002-03-27 03:16:50  No: 75418

サイズを20⇒256だけでは、無理でした。

また、仮想の構造体とは  以下のような形ですか?

    ReDim typeREN(10)

    ' エントリ数の取得
    lngRet = RasEnumEntries(vbNullString, vbNullString, typeREN(10), 10, lngEntry)


マザー  2002-03-27 19:07:32  No: 75419

構造体ですが別に配列のポインタごとではないですが
特に問題は無いと思うのですが
こちらの環境(Win2000、VB6)では第三引数に0を指定出来ない為です。
↓の様なところを見つけたので見てみてください。
http://home.iprimus.com.au/billmcc/PlatformVB/dun/rasenumentries.htm

おそらく構造体のサイズもしくは
構造体のサイズ(dwSize)あたりだと思うのですが


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

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






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