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
ソースが違っていました。
エントリ数の取得部分は、以下の間違いです。
' エントリ数の取得
lngRet = RasEnumEntries(vbNullString, vbNullString, 0, lngBuffer, lngEntry)
どちらでエラーがでてるのか解りませんが
どうやらOSのVersionにより使用方法が違う様です
気になる事があるので
RASENTRYNAMEの構造体の定義を記述してもらえませんか?
今気付いたのですが
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;
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
構造体内のパラメータ数が二つしかないですね?
少々お待ちを
Public Const RAS_MaxEntryName = 20 ' エントリの長さ
↑のサイズを256に変更すれば自端末ではできましたけど?
試してみてください
ちなみにエントリ数の取得時の第三引数には
仮想の構造体RASENTRYNAMEを渡しました
サイズを20⇒256だけでは、無理でした。
また、仮想の構造体とは 以下のような形ですか?
ReDim typeREN(10)
' エントリ数の取得
lngRet = RasEnumEntries(vbNullString, vbNullString, typeREN(10), 10, lngEntry)
構造体ですが別に配列のポインタごとではないですが
特に問題は無いと思うのですが
こちらの環境(Win2000、VB6)では第三引数に0を指定出来ない為です。
↓の様なところを見つけたので見てみてください。
http://home.iprimus.com.au/billmcc/PlatformVB/dun/rasenumentries.htm
おそらく構造体のサイズもしくは
構造体のサイズ(dwSize)あたりだと思うのですが
ツイート | ![]() |