API プログラミングを試してみたところ、AVICAP32.dll の capGetDriverDescription 関数で問題が発生しました。
Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Short, _
ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, _
ByVal cbVer As Integer) As Boolean
私が知る限り、lpszName
パラメーターはドライバーの説明を取得するためのバッファーであり、バッファーは参照型として (ByRef
の代わりにByVal
)渡す必要があることをどこかで読みました。関数から戻った後に必要です。しかし、この関数では、それは値型であり、正常に動作します! ByRef に変更しようとしても、アプリケーションは実行されませんでした。どのような知識が欠けていますか? 値の型が渡されている間、このバッファーはどのように情報を格納できますか?
これは、コードが関数を呼び出して利用可能な Web カメラを取得する方法です。
Private Sub LoadDeviceList()
On Error Resume Next
Dim strName As String = Space(100)
Dim strVer As String = Space(100)
Dim bReturn As Boolean
Dim x As Integer = 0
Do
bReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100)
If bReturn Then
lst1.Items.Add(strName.Trim)
End If
x += 1
Application.DoEvents()
Loop Until bReturn = False
End Sub