APIの使用法(RasAPI32.dll)
- 題名: APIの使用法(RasAPI32.dll)
- 著者: tina
- 日時: 2003/07/10 14:04:51
- ID: 141
- この記事の返信元:
- この記事への返信:
-
[151] (削除) 2003/07/11 11:44:56
- ツリーを表示
- 題名: (削除)
- 著者:
- 日時: 2003/07/11 11:44:56
- ID: 151
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: APIの使用法(RasAPI32.dll)
- 著者: tina
- 日時: 2003/07/23 13:57:14
- ID: 207
- この記事の返信元:
-
[151] (削除) 2003/07/11 11:44:56
- この記事への返信:
- ツリーを表示
ダイアルアップのAPI RasApi32.dllを使用するため、
以下のように 構造体 および DllImportを定義したのですが、
RasEnumDevicesの戻り値が
632 : 構造体のサイズエラー
が帰ってきます。
何が悪いのか見当がつかないので、
どなたかご教授ください。
よろしくお願いします。
<以下 vb.net ソース抜粋>
Public Const RAS_MAXDEVICETYPE As Integer = 16
Public Const RAS_MAXDEVICENAME As Integer = 128
'RAS デバイスの情報
'typedef struct tagRASDEVINFO {
' DWORD dwSize;
' TCHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
' TCHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
'} RASDEVINFO;
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Public Structure SRasDevInfo
Dim dwSize As Integer
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MAXDEVICETYPE)> _
Dim szDeviceType As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MAXDEVICENAME)> _
Dim szDeviceName As String
End Structure
Class CRas
<中略>
'利用可能なすべての RAS 対応デバイスの名前と種類を返します。
'DWORD RasEnumDevices(
' LPRASDEVINFO lpRasDevInfo, // RAS デバイスの情報を受け取るバッファ
' LPDWORD lpcb, // バッファのサイズ(バイト数)
' LPDWORD lpcDevices // バッファに書き込まれたエントリ数を受け取る変数
');
<DllImport("rasapi32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function RasEnumDevices( _
ByRef lpRasDevInfo As SRasDevInfo(), _
ByRef lpcb As Integer, _
ByRef lpcDevices As Integer) As Integer
End Function
<中略>
Public Function GetDevises() As SRasDevInfo()
Dim rdiRet As SRasDevInfo()
Dim intDevInfoSize As Integer
Dim intCount As Integer
Dim intSize As Integer
Dim i As Integer
Dim intRet As Integer
ReDim rdiRet(0)
intCount = 1
intDevInfoSize = Marshal.SizeOf(rdiRet(0))
intSize = intDevInfoSize * intCount
rdiRet(0).dwSize = intDevInfoSize
intRet = RasEnumDevices(rdiRet, intSize, intCount)
If intRet = RASERROR.ERROR_BUFFER_TOO_SMALL Then
'バッファをリサイズしてリトライ
ReDim rdiRet(intCount)
rdiRet(0).dwSize = intDevInfoSize
intSize = intDevInfoSize * intCount
intRet = RasEnumDevices(rdiRet, intSize, intCount)
Else
End If
Return rdiRet
End Function
end Class