C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ActiveXコンポーネントが作成できません


(過去ログ 113 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■66978 / inTopicNo.1)  ActiveXコンポーネントが作成できません
  
□投稿者/ 手さぐり (1回)-(2013/06/13(Thu) 16:53:18)

分類:[VB.NET/VB2005 以降] 

VB2008で開発しています。

タイトルのエラーが出るのですがどうすればよいのかわかりません。

コード
Public Function GetPNPDeviceID(ByVal strDriveLetter As String) As String
GetPNPDeviceID = Nothing
Try
Dim objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Dim objDrive
Dim colDiskDrives = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive")
For Each objDrive In colDiskDrives
Dim objPartition
Dim colPartitions = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" + Replace(objDrive.DeviceID, "\", "\\") + """} WHERE AssocClass =Win32_DiskDriveToDiskPartition")
For Each objPartition In colPartitions
Dim objLogicalDisk
Dim colLogicalDisks = objWMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" + objPartition.DeviceID & """} WHERE AssocClass = Win32_LogicalDiskToPartition")
For Each objLogicalDisk In colLogicalDisks
If CStr(objLogicalDisk.DeviceID) = strDriveLetter + ":" Then
Dim varPNPDeviceID = Split(CStr(objDrive.PNPDeviceID), "\")
GetPNPDeviceID = varPNPDeviceID(UBound(varPNPDeviceID))
Exit For
End If
Next
Next
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If WM_DEVICECHANGE = m.Msg Then
Dim dbv As New DEV_BROADCAST_VOLUME
dbv = Marshal.PtrToStructure(m.LParam, GetType(DEV_BROADCAST_VOLUME))
If dbv.dbcv_devicetype = DBT_DEVICETYPE.DBT_DEVICETYPE_VOLUME Then
Dim drv = getDriveString(dbv.dbcv_unitmask)
Select Case m.WParam.ToInt32
Case DBT.DBT_DEVICEARRIVAL
MsgBox(drv + ": を取り付けた!" + vbCrLf + GetPNPDeviceID(drv))
Case DBT.DBT_DEVICEREMOVECOMPLETE
MsgBox(drv + ": を取り外した!" + vbCrLf + GetPNPDeviceID(drv))
End Select
End If
End If
MyBase.WndProc(m)
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
MsgBox(GetPNPDeviceID("E"))
End Sub

一部省略してますが
Button2_ClickのMsgBoxで実行するとシリアルIDが取得できるのですが
WndProcの状態で取得しようとすると
Dim objWMIService = GetObject("winmgmts:\\.\root\cimv2")の部分で
「ActiveXコンポーネントが作成できません」
となります。

引用返信 編集キー/
■66981 / inTopicNo.2)  Re[1]: ActiveXコンポーネントが作成できません
□投稿者/ 魔界の仮面弁士 (248回)-(2013/06/13(Thu) 23:36:52)
No66978 (手さぐり さん) に返信
> Dim objWMIService = GetObject("winmgmts:\\.\root\cimv2")

これは、COM の SWbemServices オブジェクト経由での呼び出し方ですよね。

変数宣言に As 句が無いことからして、VBScript 向けのコードを
流用しているのだとは思いますが、VB.NET から WMI を扱うのであれば、
System.Management 名前空間のクラスを使うべきかと。


> タイトルのエラーが出るのですがどうすればよいのかわかりません。

「ActiveX コンポーネントを作成できません」
「Activex コンポーネントはオブジェクトを作成できません」

などであれば見たことがあるのですが、

「ActiveXコンポーネントが作成できません」

というエラーは見たことが無いですね…(恐らく同種の物だとは思いますが)。


> WndProcの状態で取得しようとすると

とりあえず、WndProc から直接呼び出すのではなく、Timer 経由で
60 ミリ秒後に GetPNPDeviceID を実行してみるのはどうでしょうか。
引用返信 編集キー/
■66982 / inTopicNo.3)  Re[2]: ActiveXコンポーネントが作成できません
□投稿者/ コピー財布 (1回)-(2013/06/14(Fri) 11:02:59)
コピー財布 さんの Web サイト
No66981 (魔界の仮面弁士 さん) に返信
> ■No66978 (手さぐり さん) に返信
>>Dim objWMIService = GetObject("winmgmts:\\.\root\cimv2")
>
> これは、COM の SWbemServices オブジェクト経由での呼び出し方ですよね。
>
> 変数宣言に As 句が無いことからして、VBScript 向けのコードを
> 流用しているのだとは思いますが、VB.NET から WMI を扱うのであれば、
> System.Management 名前空間のクラスを使うべきかと。
>
>
>>タイトルのエラーが出るのですがどうすればよいのかわかりません。
>
> 「ActiveX コンポーネントを作成できません」
> 「Activex コンポーネントはオブジェクトを作成できません」
>
> などであれば見たことがあるのですが、
>
> 「ActiveXコンポーネントが作成できません」
>
> というエラーは見たことが無いですね…(恐らく同種の物だとは思いますが)。
>
>
>>WndProcの状態で取得しようとすると
>
> とりあえず、WndProc から直接呼び出すのではなく、Timer 経由で
> 60 ミリ秒後に GetPNPDeviceID を実行してみるのはどうでしょうか。
などであれば見たことがあるのですが、

「ActiveXコンポーネントが作成できません」

引用返信 編集キー/
■66985 / inTopicNo.4)  Re[2]: ActiveXコンポーネントが作成できません
□投稿者/ 手さぐり (2回)-(2013/06/15(Sat) 14:17:28)
魔界の仮面弁士さん コピー財布さんに返信

> 「ActiveX コンポーネントを作成できません」
> 「Activex コンポーネントはオブジェクトを作成できません」
> などであれば見たことがあるのですが、
> 「ActiveXコンポーネントが作成できません」
> というエラーは見たことが無いですね…(恐らく同種の物だとは思いますが)。
>

申し訳ないです。
ActiveX コンポーネントを作成できません
のまちがいです。><;

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -